我需要一个RegEx来验证输入的数字
我尝试使用以下RegEx,但我没有成功..
/(0|[1-9]\.[1-9]|\10.0)/g
fyi,在我的系统中,' 0'表示没有输入等级',10.0是最大值,最小值是1.0
答案 0 :(得分:3)
您遇到问题可能是因为您错过了开始和结束标记,例如^
和$
,因此,您的解决方案不会受到整个输入的限制。尝试:
/^(0|[1-9]\.[0-9]|10\.0)$/g
答案 1 :(得分:1)
我认为这个更健壮吗?
^0$|^[1-9]{1}\.[0-9]{1}$|^10\.0$
要担心的主要问题是上面的内容会匹配12.0
,因为0
没有锚定。您还希望在十进制大小写中使用{1}
量词,并在小数点后包含[0-9]
(因此7.0
匹配)。
编辑:变更说明
^
和$
添加到三个选项中的每一个都可确保匹配是整个字符串。这意味着,例如,^0$
与0
匹配,但与0.0
,01
,6.0
或0
仅为[1-9]
的任何其他字符串不匹配字符串的一部分。[0-9]
更改为7.0
,可以{1}
匹配,之前不会[]
添加到第二个选项中小数点之前和之后的[1-9]\.[0-9]
组,可确保我们只匹配一个数字。以前,12.1
会匹配5.33
,^
以及匹配仅包含在字符串中的其他字符串。它们在$
和\
方面有些多余,但对于正则表达式我喜欢故障... .
移到了小数点之前,这似乎是一个错字(我们希望匹配文字.
而不是使用$window
来表示任何角色)答案 2 :(得分:1)
我的建议:
(?<![0-9.])(0|(?:[1-9]\.[0-9])|(?:10\.0))(?![0-9.])
以下所有内容将匹配:0,1.1,1.0,1.9,2.0,2.1,9.0,9.1,9.9,10.0,但以下所有内容均不会:0.1,0.2,0.9,1.11,1.20,1.01, 10.05,110.05。每行不需要一个数字,可以提取文本中嵌入的数字。
以下是示例:regex101
更详细的解释:
(?<![0-9.])
是一种后视,可以防止我们在多行输入中删除数字文字,例如:不应匹配10000010.0。
(0|(?:[1-9]\.[0-9])|(?:10\.0))
这是符合您的规格的部分。仅当您希望保留匹配的群组时才需要?:
&#34;清洁&#34;,因为中间案例不会有group(2)
(?![0-9.])
这是另一个向前看,再次:仅对多行文字很重要。
如果你放弃了后视,前瞻和&#34;环保型比赛组&#34;,你最终得到的结果如下:
0|([1-9]\.[0-9])|(10\.0)
如果您使用的是每行一项输入,则可以添加前缀^
和后缀$
,然后继续使用。