下面是我正在使用的正则表达式
^\d+\.?((25)|(5)|(75)|0+)?$
应该允许数字
0010
,10.0
,0.0
,0
,0.25
,1.0
,22
,1.5
,11.25
,23.75
,22.000
等。
我不想允许
0017.5
,0010.0
等,其前导0
的十进制数字。
我该怎么做?
答案 0 :(得分:1)
如果您可以在正则表达式模式中使用先行,则可以使用
^(?!0+[1-9]\d*\.\d)\d+(?:\.(?:[27]?5|0+))?$
请参见regex demo。如果字符串以一个或多个零开头且数字本身是带小数的数字,则(?!0+[1-9]\d*\.\d)
否定超前查询将使匹配失败。
正则表达式详细信息
^
-字符串的开头(?!0+[1-9]\d*\.\d)
-如果在字符串开头立即有一个否定的超前匹配失败
0+
-一个或多个0
字符[1-9]
-从1
到9
的数字\d*
-0位数以上\.
-一个点\d
-一个数字\d+
-1个以上数字(?:\.(?:[27]?5|0+))?
-匹配1或0次出现的可选字符串:
\.
-点(?:[27]?5|0+)
-2
或7
(可选),然后是5
,或一个或多个0
字符$
-字符串的结尾。答案 1 :(得分:0)
给起始数字一个范围,而不是允许任何数字,并在该数字之后但在逗号之前允许0个或多个数字。删除?..?
量词,因为您要确保它是一个十进制数。要说明整数,请添加|(\d+)
。要说明0到1之间的数字,请添加([0]\.((25)|(5)|(75)|0+))
,这将变成:
^(([0]\.((25)|(5)|(75)|0+))|([1-9]\d*\.((25)|(5)|(75)|0+))|(\d+))$