我有正则表达式应该验证一些数字:
\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
,我想阻止它。任何帮助或建议都会很棒。
答案 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
如果输入中存在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