正则表达式匹配正数或负数或空字符串,但不是' - '单独

时间:2018-01-04 11:56:45

标签: javascript regex numbers

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

输入应接受:

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

我使用过这个正则表达式:

^(-?)[\d]*$

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

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

2 个答案:

答案 0 :(得分:5)

您可以强制使用数字,并将整数匹配部分与可选组包含在一起:

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

请参阅regex demo

<强>详情

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

答案 1 :(得分:2)

以下正则表达式应符合您的要求:

^(|-?\d+)$

这是demo

让我们剖析正则表达式以了解它是如何工作的

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

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