代码之家  ›  专栏  ›  技术社区  ›  Justin808

Regex-如何在字符串为空时使我的Regex不通过

  •  2
  • Justin808  · 技术社区  · 15 年前

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

    ^(\\d|-)?(\\d|,)*\\.?\\d*$
    
    5 回复  |  直到 15 年前
        1
  •  2
  •   Mark Byers    15 年前

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

    Rubular

    也允许匹配.05:

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

    Rubular

    请注意,表达式还允许一个接一个的多个逗号,这可能是不可取的。

        2
  •  1
  •   Andy Lester    15 年前

    你在用什么语言?毫无疑问,有更好的方法让你发现“这是一个数字吗?”而不是从头开始滚动你自己的regex。如果您使用的是Perl,那么看看Regexp::Common模块,它提供了几十个经过时间测试的regex供您使用。

        3
  •  0
  •   krico    15 年前

    尝试

    ^-?([0-9]+)(,[0-9]+)?$
    
        4
  •  0
  •   BlairHippo    15 年前

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

    在Rubular上测试过了,太棒了(谢谢,马克!)它会接受一些草率的逗号管理,比如“1234567”,但会拒绝像“123,,,456”这样明显的废话。

        5
  •  0
  •   Axeman maxelost    15 年前

    这是正确的正则表达式 分组

    ^-?(?:\\.\\d+|\\d{1,3}(?:,\\d{3})*(\\.\\d*)?)$
    
    • 它接受一个初始信号。
    • 如果它没有这两个,它就失败了。
    • 然后,你可以有一个小数点,如果你想,并跟进它与许多数字,你想。

    以下修复程序也处理未分组的数字:

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

    • 如果它是一个数字,那么只有一个数字或一个句号可以跟在后面。
    • 给定一个逗号,后面只能跟着3个数字。我们把它强化到1个或更多,因为 \\d* 处理即时周期的情况。