Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-如何使我的正则表达式在字符串为空时不通过_Regex - Fatal编程技术网

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

Regex 正则表达式-如何使我的正则表达式在字符串为空时不通过,regex,Regex,我有一个正则表达式,它将验证以确保我有一个数字。但是如果我正在检查的字符串也是“”,那么它就通过了。我怎样才能使“”失败 试一试 您可能需要至少一位数字: ^-?\d[\d,]*(?:\.\d+)?$ ^^ required 也允许匹配。05: ^-?\d[\d,]*(?:\.\d+)?$|^-?\.\d+$ 请注意,您的表达式还允许一个接一个地使用多个逗号,这可能是不需要的。那么 ^-?\d+(,\d{3})*(\。\d+)$^-?\。\d+$ 在Rubular上进行了测试,非常

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

试一试


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

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

也允许匹配。05:

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

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

那么

^-?\d+(,\d{3})*(\。\d+)$^-?\。\d+$


在Rubular上进行了测试,非常棒(谢谢,Mark!)它会接受一些粗心的逗号管理,比如“1234567”,但会拒绝“123,,,,456”这样明显的废话

你在用什么语言?毫无疑问,对于您来说,有一种更好的方法来检测“这是一个数字吗?”而不是从头开始滚动您自己的正则表达式。如果您使用的是Perl,那么请查看Regexp::Common模块,它提供了几十个经过时间测试的正则表达式供您使用。

这是适用于分组小数的正则表达式:

^-?(?:\\.\\d+|\\d{1,3}(?:,\\d{3})*(\\.\\d*)?)$
  • 它接受初始符号
  • 之后,它会创建一个具有两个路径的树,周期或1-3位数字
  • 如果这两个都没有,它就会失败
  • 如果它看到一个句点,那么它将接受任意数量的数字,但至少是1
  • 如果它看到一个数字簇,它将使用由逗号+3个数字组成的任意数量的组
  • 然后,你可以有一个小数点,如果你想要的话,并在它后面加上你想要的数字
以下修复程序也处理未分组的数字:

^-?(?:\\.\\d+|\\d{1,3}(?:\\d*|(?:,\\d{3})+)(\\.\\d*)?)$
但它不允许一个人在一个小组中包含超过3个成员。因此,在1-3位之后,必须有另一位数字、逗号、句点或结尾

  • 如果是一个数字,那么后面只能跟一个数字或一个句号
  • 给定一个逗号,后面只能跟3个数字。由于
    \\d*
    处理立即期的情况,因此我们将其强化为1或更多

只需单独检查“”即可。Boo regex,Boo!我想要这个接受号码:1120.03或100100200.30或10002或.05
^-?(?:\\.\\d+|\\d{1,3}(?:,\\d{3})*(\\.\\d*)?)$
^-?(?:\\.\\d+|\\d{1,3}(?:\\d*|(?:,\\d{3})+)(\\.\\d*)?)$