【问题标题】:Regex to match positive or negative number or empty string, but not '-' alone正则表达式匹配正数或负数或空字符串,但不单独匹配“-”
【发布时间】:2018-01-04 11:56:45
【问题描述】:

我想在 Javascript 中验证输入中的数字。

输入应该接受:

  • 空输入''
  • 正数'123'
  • 负数'-123'

我用过这个正则表达式:

^(-?)[\d]*$

它工作得很好,但它也只接受减号字符 '-' 。我想排除这种可能性。我当然可以用+ 替换*,但这会排除空字符串。

我怎样才能做到- 必须后跟至少一个数字,但一个完全空的字符串仍然可以?

【问题讨论】:

  • 为什么不isNaN()
  • 你可以使用/^(?:-?\d+)?$/
  • @gurvinder372 它需要基于 RegEx,因为它是更大验证系统的一部分。

标签: javascript regex numbers


【解决方案1】:

您可以将数字设为必填项,并用可选组将整个数字匹配部分括起来:

/^(?:-?\d+)?$/

regex demo

详情

  • ^ - 字符串的开头
  • (?:-?\d+)? - 一个可选的非捕获组,匹配 1 次或 0 次出现:
    • -? - 一个可选的-
    • \d+ - 1 位或多位数字
  • $ - 字符串结束。

【讨论】:

    【解决方案2】:

    以下正则表达式应满足您的要求:

    ^(|-?\d+)$
    

    这是demo

    让我们剖析正则表达式以了解它的工作原理

    • 外部主体^()$^ 表示字符串的开始,$ 表示结束。 () 告诉匹配器捕获所有包含的内容。所以在我们的例子中,这意味着我们的输入应该是完全匹配的。
    • | 是一个布尔值 OR,即如果满足任一正则表达式,则返回正数。
    • -?\d+匹配正负数如下
      1. -? 匹配 - 零到一次
      2. \d+ 匹配一到无限次之间的数字
    • 还有另一个基本上不存在的检查。如果您仔细观察,该表达式在 | OR 运算符之前没有任何内容。即 null 或空输入检查。
    • 这些与 OR 结合意味着输入可以是空值或整数。

    结合所有这些,我们得到了所需的正则表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多