使用正则表达式在十进制数中没有前导零的条件

时间:2018-08-08 08:38:15

标签: regex

下面是我正在使用的正则表达式

^\d+\.?((25)|(5)|(75)|0+)?$应该允许数字

001010.00.000.251.0221.511.2523.7522.000等。

我不想允许 0017.50010.0等,其前导0的十进制数字。

我该怎么做?

2 个答案:

答案 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]-从19的数字
    • \d*-0位数以上
    • \.-一个点
    • \d-一个数字
  • \d+-1个以上数字
  • (?:\.(?:[27]?5|0+))?-匹配1或0次出现的可选字符串:
    • \.-点
    • (?:[27]?5|0+)-27(可选),然后是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+))$