正则表达式表示十进制值和可选字符串



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

有效

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

无效

  • 7,75
  • 11
  • 7这是我的字符串
  • 7.这是我的字符串
  • 10.5 字符串

我有这个来获取十进制值,但我不确定如何获取它后面的可选文本。

^(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或从19的数字,后跟一个可选的,.序列以及任何一位数字,然后......
  • (?:s.*)?$- 任何
  • 空格的可选序列,后跟任何字符,直到字符串末尾 - 或 -
  • (?!S)- 如果当前位置右侧没有非空格字符,则匹配失败的负前瞻。

C# 测试:

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.

最新更新