2017-04-27 42 views
1

我正在寻找一个正则表达式来验证评级(1-10)+可选文本。 评分是一个小数,有1分,可以同时使用点或逗号分隔符。 后面跟着一个可选的空格+字符串。十进制值和可选字符串的正则表达式

有效

  • 7,5
  • 7.5
  • 7,5这是我的字符串
  • 7.5你好

无效

  • 7,75
  • 7This是我的字符串
  • 7,本是我的字符串
  • 10.5串

我有这样来十进制值,但我我不知道如何获得它后面的可选文本。

^(10|\d)([\.\,]\d{1,1})?$ 
+0

也许['^(?: 10 | \ d)(?:[,] \ d)?(:\ s +。*)?$'](https://regex101.com/r/XSty0I/1)将按预期工作。但在这里,号码后需要一个空格。 –

+2

如果空格可能丢失,并且您可能会输入如'7这是我的字符串',请尝试['^(?: 10 | \ d)(?:[。,] \ d)?(?:[^ \ d ,。]。*)?$'](https://regex101.com/r/XSty0I/2)。然而,'7.这是我的字符串'然后不会被验证。 –

+2

允许使用'0.5'和'10.3'吗?你说你想匹配'1-10',但是你的正则表达式匹配'0'和'0.5'和'10.3' – Toto

回答

3

从你的例子来判断,初始数字之后的空格不是可选的。因此,可以使用该图案是

^(?:10|[1-9](?:[.,][0-9])?)(?:\s.*)?$ 

或 - 由于具有Regex.IsMatch部分匹配是足够验证串 - 具有负先行(?!\S),这将需要一个空格或数后字符串的末尾替换(?:\s.*)?$

^(?:10|[1-9](?:[.,][0-9])?)(?!\S) 
          ^^^^^^^ 

regex demo

详细

  • ^ - 串
  • (?:10|[1-9](?:[.,][0-9])?)的开始 - 无论是10或从19数字,后面带有,.和任何单个数字,然后的可选序列...
  • (?:\s.*)?$ - 一个任意空格后面跟随任意字符的可选序列,直到字符串末尾 - 或 -
  • (?!\S) - 如果在当前位置右侧没有非空白字符,则表示匹配失败。

C# test

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. 
+0

如果正则表达式行为仍然不如预期,请在此处放置评论。 –

+1

谢谢!伟大的作品 –

+0

我认为最后一部分'(?:\ s。*)?$'也可以写成'(?:\ s | $)' – silel