【问题标题】:regex allow only numbers or empty string正则表达式只允许数字或空字符串
【发布时间】:2010-07-14 17:44:52
【问题描述】:

谁能帮我创建这个正则表达式。我需要它来检查字符串是完全空格(空)还是只包含正整数。如果还有其他事情,它会失败。这是我目前所拥有的。

/^\s*|[0-9][0-9]*/

【问题讨论】:

  • [0-9][0-9]* 与 [0-9]+ 相同

标签: regex


【解决方案1】:

您正在寻找:

/^(\s*|\d+)$/

如果您想要一个不带前导零的正数,请使用[1-9][0-9]*

如果你不关心数字周围的空格,你也可以试试:

/^\s*\d*\s*$/

请注意,您不希望允许部分匹配,例如 123abc,因此您需要开始和结束锚点:^...$
您的正则表达式有一个常见错误:例如,^\s*|\d+$ 不会强制匹配,就像 (^\s*)|(\d+$)、阅读、开头的空格或结尾的数字一样。

【讨论】:

  • 你的第二个例子只会匹配开头或结尾的空格......它不会匹配“1 2 3”
  • @Cfreak,你为什么要匹配1 2 3
  • 我把它读作空格或整数。与字符串中的空格无关
  • 这很酷。 OP 可能想要忽略所有空格。这就是为什么你得到我的 +1 - 你的答案更短。另外,OP说“正整数s
  • 好吧,我想^\s*([1-9]\d*\s*)+$ 只允许使用空格和正数,但我只是傻了。
【解决方案2】:

要匹配数字或空字符串'',即用户没有输入任何输入,请执行此操作

(^[0-9]+$|^$)

匹配数字、空字符串或空白字符

(^[0-9]+$|^$|^\s$)

regex101上测试这个

【讨论】:

    【解决方案3】:

    Kobi 有一个很好的答案,但从技术上讲,您不必捕获它(除非您要对输出做某事)

    /^[\s\d]+$/
    

    或者如果您不在乎字符串是否完全为空(即“”)

    /^[\s\d]*$/
    

    为了澄清,我理解原来的问题是应该忽略字符串中的空格。

    【讨论】:

    • /^[\s\d]*$/ 的问题是它与 123 123 之类的东西匹配
    • 除非我弄错了,Kobi 的答案中的组不是为了捕获数字,而是为了让锚(^$)远离|
    【解决方案4】:

    你可以试试-

    /^\d*$/
    

    与空格匹配-

    /^[\s\d\s]*$/
    

    【讨论】:

    • 空格不匹配
    【解决方案5】:
    ^\d+([\.\,][0]{2})?$
    

    我发现这对我有用。允许任何整数,但只允许小数点 0.00

    通过

    • 999 90
    • 100
    • 100.00
    • 101.00
    • 1000.00

    失败

    • 101.01
    • 1000.99

    试试http://regexpal.com/

    【讨论】:

      【解决方案6】:

      这对我有帮助。它匹配空字符串和您输入的任何数字。

      /^(|\d)+$/
      

      如果您愿意,请在此处尝试:regex101.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        相关资源
        最近更新 更多