我正在寻找一个正则表达式来验证评级(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