价格验证的正则表达式

时间:2015-09-08 06:15:05

标签: regex

我试图找到一个正则表达式,它接受十进制前最多5位数,小数点后最多2位数。十进制部分是可选的,如果0是唯一的数字,则不应接受。但是如果0后面跟着小数点后或其他数字,则接受。 例如:

有效数据为:12345.12,123.12,0.12,00.12,1.2,0123.12

无效数据为:0,00,000,0000,00000

我已经创建了一个表达式^\d{0,5}(\.\d{1,2})?$",但如果数字以0开头,则不起作用。

3 个答案:

答案 0 :(得分:4)

^(?!0+$)\d{0,5}(.\d{1,2})?$

 ^^^^^^^

如果只找到lookahead,只需添加0,这会使正则表达式失败。

编辑:

如果您不想允许0.0使用

^(?!0+(\.0+)?$)\d{0,5}(.\d{1,2})?$

答案 1 :(得分:0)

这也有效:

^\d{0,5}(?!(\.|,)0{2})(\.|,)\d{1,2}$

(?!(\.|,)0{2})断言该数字在小数点后不仅包含0

Demo on regex101

答案 2 :(得分:0)

  

不允许使用空字符串,但00001.01之类的值有效

您可以将以下正则表达式用于检查不允许值的负向预测:

 ^(?!$)(?!0+$)\d{0,5}(?:\.(?!0{1,2}$)\d{1,2})?$
  ^^^^^ ^^^^^              ^^^^^^^^^

请参阅demo

正则表达式分解:

  • ^ - 字符串开头
  • (?!$) - 确保字符串不为空(字符串的结尾不会在开头之后出现)
  • (?!0+$) - 确保整数不仅包含零
  • \d{0,5} - 0到5位
  • (?:\.(?!0{1,2}$)\d{1,2})? - 一个可选的序列...
    • \. - 小数时段
    • (?!0{1,2}$)\d{1,2} - 非\d{1,2}000
    • 的2位或1位数((?!0{1,2}$)
  • $ - 字符串结尾