不要使用正则表达式允许多个点

时间:2015-06-02 10:33:17

标签: javascript regex validation

我有正则表达式应该验证一些数字:

\b\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{1,3}[,]?\d{0,2}\b

数字格式类似于:123.456,00

它的工作几乎完美,除了它允许123...456,00,我想阻止它。任何帮助或建议都会很棒。

2 个答案:

答案 0 :(得分:2)

可能我错了,但我想你正在寻找:

\b\d{1,3}(?:\.\d{3})*,\d{0,2}\b

匹配:

  • 1,00
  • 1.234,56
  • 123.456.789,01

答案 1 :(得分:1)

您可以使用否定前瞻来避免将数字与多个点匹配:

/^(?!(?:.*?\.){2})\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{1,3}[,]?\d{0,2}$/gm

RegEx Demo

如果输入中存在2个点,那么

(?!(?:.*?\.){2})是否定前瞻意味着匹配失败。

编辑:根据以下评论,如果您只想允许2个相邻的点,请使用:

/^(?!.*?\.{2})\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{0,3}[.]?\d{1,3}[,]?\d{0,2}$/gm

RegEx Demo2