我正在尋找一個正則表達式來驗證評級(1-10)+可選文本。 評分是一個小數,有1分,可以同時使用點或逗號分隔符。 後面跟着一個可選的空格+字符串。十進制值和可選字符串的正則表達式
有效
- 7,5
- 7.5
- 7,5這是我的字符串
- 7.5你好
無效
- 7,75
- 7This是我的字符串
- 7,本是我的字符串
- 10.5串
我有這樣來十進制值,但我我不知道如何獲得它後面的可選文本。
^(10|\d)([\.\,]\d{1,1})?$
我正在尋找一個正則表達式來驗證評級(1-10)+可選文本。 評分是一個小數,有1分,可以同時使用點或逗號分隔符。 後面跟着一個可選的空格+字符串。十進制值和可選字符串的正則表達式
有效
無效
我有這樣來十進制值,但我我不知道如何獲得它後面的可選文本。
^(10|\d)([\.\,]\d{1,1})?$
從你的例子來判斷,初始數字之後的空格不是可選的。因此,可以使用該圖案是
^(?:10|[1-9](?:[.,][0-9])?)(?:\s.*)?$
或 - 由於具有Regex.IsMatch
部分匹配是足夠驗證串 - 具有負先行(?!\S)
,這將需要一個空格或數後字符串的末尾替換(?:\s.*)?$
:
^(?:10|[1-9](?:[.,][0-9])?)(?!\S)
^^^^^^^
詳細:
^
- 串(?:10|[1-9](?:[.,][0-9])?)
的開始 - 無論是10
或從1
到9
數字,後面帶有,
或.
和任何單個數字,然後的可選序列...(?:\s.*)?$
- 一個任意空格後面跟隨任意字符的可選序列,直到字符串末尾 - 或 -(?!\S)
- 如果在當前位置右側沒有非空白字符,則表示匹配失敗。var strs = new List<string> { "7","7,5","7.5","7,5 This is my string","7.5 Hello","7,75","11","7This is my string","7.This is my string","10.5 string"};
var pattern = @"^(?:10|[1-9](?:[.,][0-9])?)(?:\s.*)?$";
foreach (var s in strs)
if (Regex.IsMatch(s, pattern))
Console.WriteLine("{0} is correct.", s);
else
Console.WriteLine("{0} is invalid.", s);
輸出:
7 is correct.
7,5 is correct.
7.5 is correct.
7,5 This is my string is correct.
7.5 Hello is correct.
7,75 is invalid.
11 is invalid.
7This is my string is invalid.
7.This is my string is invalid.
10.5 string is invalid.
也許['^(?: 10 | \ d)(?:[,] \ d)?(:\ s +。*)?$'](https://regex101.com/r/XSty0I/1)將按預期工作。但在這裏,號碼後需要一個空格。 –
如果空格可能丟失,並且您可能會輸入如'7這是我的字符串',請嘗試['^(?: 10 | \ d)(?:[。,] \ d)?(?:[^ \ d ,。]。*)?$'](https://regex101.com/r/XSty0I/2)。然而,'7.這是我的字符串'然後不會被驗證。 –
允許使用'0.5'和'10.3'嗎?你說你想匹配'1-10',但是你的正則表達式匹配'0'和'0.5'和'10.3' – Toto