正则表达式不能以0开头,但可以从0或0开始,

时间:2017-10-12 11:43:45

标签: regex floating-point

我一直在尝试制作一个接受

的reg exp
0.27878
0,8989
2.98889 

但不能仅以0开头,例如088989383

我使用了^(?:\d+|\d{1,3}(?:,\d{3})+)(?:(\.|,)\d+)?$

任何解决方案..谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用

^(?!0+[1-9])(?:\d+|\d{1,3}(?:,\d{3})+)(?:[.,]\d+)?$

请参阅regex demo。 {1}}否定前瞻将使所有字符串失败,以1个或多个零开头,后跟(?!0+[1-9])以外的数字。

如果您想使0个数字失败,请将前瞻替换为00.825

(?!0\d)

请参阅pattern variation demo

模式详情

  • ^(?!0\d)(?:\d+|\d{1,3}(?:,\d{3})+)(?:[.,]\d+)?$ - 字符串开头
  • ^ - 如果一个数字以一个数字开头,那么以1个或多个零开头的字符串后跟一个非(?!0+[1-9])(或0以外的数字的字符串将会失败。 (?!0\d)后跟任何数字)
  • 0 - 两种选择:
    • (?:\d+|\d{1,3}(?:,\d{3})+) - 一位或多位
    • \d+ - 或
    • | - 1至3位数字
    • \d{1,3} - 连续发生一次或多次(?:,\d{3})+,然后是3位数
  • , - (?:[.,]\d+)?.的可选序列,然后是1位或更多位数
  • , - 字符串结束。