我有一个正则表达式,将验证以确保我有一个数字。但是如果我正在检查的字符串也是“”,它就会通过。我怎么能做出“失败?”
^(\\d|-)?(\\d|,)*\\.?\\d*$
答案 0 :(得分:2)
您可能需要至少一位数字:
^-?\d[\d,]*(?:\.\d+)?$
^^
required
还允许匹配.05:
^-?\d[\d,]*(?:\.\d+)?$|^-?\.\d+$
请注意,您的表达式也允许一个接一个地使用多个逗号,这可能是不可取的。
答案 1 :(得分:1)
您使用的是哪种语言?毫无疑问,你有更好的方法来检测“这是一个数字吗?”而不是从头开始滚动你自己的正则表达式。如果您正在使用Perl,那么请查看Regexp :: Common模块,该模块提供了许多经过时间考验的正则表达式供您使用。
答案 2 :(得分:0)
尝试
^-?([0-9]+)(,[0-9]+)?$
答案 3 :(得分:0)
怎么样......
^-?\d+(,\d{3})*(\.\d+)?$|^-?\.\d+$
在Rubular上测试过,这太棒了(谢谢,马克!)它会接受一些草率的逗号管理,比如“1234,567”,但会拒绝像“123 ,,,, 456”这样明显的废话。
答案 4 :(得分:0)
这是分组小数的正确正则表达式:
^-?(?:\\.\\d+|\\d{1,3}(?:,\\d{3})*(\\.\\d*)?)$
以下修补程序也处理未编号的数字:
^-?(?:\\.\\d+|\\d{1,3}(?:\\d*|(?:,\\d{3})+)(\\.\\d*)?)$
但它不允许某人在一组中包含超过3个。因此,在1-3位数之后,必须有另一个数字或逗号或句号或结尾。
\\d*
处理了一个直接时期的情况。