正则表达式 - 当字符串为空时,如何使我的正则表达式不通过

时间:2010-10-12 20:48:49

标签: regex

我有一个正则表达式,将验证以确保我有一个数字。但是如果我正在检查的字符串也是“”,它就会通过。我怎么能做出“失败?”

^(\\d|-)?(\\d|,)*\\.?\\d*$

5 个答案:

答案 0 :(得分:2)

您可能需要至少一位数字:

^-?\d[\d,]*(?:\.\d+)?$
   ^^
required

Rubular

还允许匹配.05:

^-?\d[\d,]*(?:\.\d+)?$|^-?\.\d+$

Rubular

请注意,您的表达式也允许一个接一个地使用多个逗号,这可能是不可取的。

答案 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*)?)$
  • 它接受初始标志。
  • 之后,它会创建一个包含两个路径的树,无论是句号还是1-3位。
  • 如果它没有其中任何一个,则失败。
  • 如果它看到一个句号,则它将占用任意数量的数字,但至少为1。
  • 如果它看到一个数字集群,它将采用任意数量的组,包括逗号+3位数。
  • 然后,如果需要,您可以使用小数点,并按照您想要的数字跟随它。

以下修补程序也处理未编号的数字:

^-?(?:\\.\\d+|\\d{1,3}(?:\\d*|(?:,\\d{3})+)(\\.\\d*)?)$

但它不允许某人在一组中包含超过3个。因此,在1-3位数之后,必须有另一个数字或逗号或句号或结尾。

  • 如果它是一个数字,那么除了数字或句点之外别无其他。
  • 给出一个逗号,可以跟随3个数字。我们将此强化为1或更多,因为\\d*处理了一个直接时期的情况。