【问题标题】:regexp to validate a non-zero number正则表达式验证非零数
【发布时间】:2019-11-06 00:09:37
【问题描述】:

我的要求是验证一个非零数字。我使用的正则表达式如下。

^[1-9]?\d+(\.\d)?\d*$

有效值应该是

  • 2
  • 22
  • 2222(最多任意位数)
  • 2.2222(最多小数点)

无效值

  • 0
    1. (。没有十进制值)
  • 0.1(任何小数位数,但起始位为 0)
  • 2.4.5(不止一个。)

基本上任何以 0 开头或具有多个 1 的值。或 时不提供小数点。已添加,不正确。

【问题讨论】:

  • 0938435 有效吗?
  • no 938435 应该是有效的。如果以0开头,则应该是无效的。

标签: javascript regex expression


【解决方案1】:

^[1-9]\d*(?:\.\d+)?$

https://regex101.com/r/wHZUoW/1

-由于您不希望数字以0 开头,因此您不应将开头的[1-9] 设为可选?

-作为一般的良好做法,使用非捕获组(?: ... ) 代替捕获组,因为以后不需要引用内容。

【讨论】:

    【解决方案2】:

    您可以使用此正则表达式来验证您的号码:

    ^(?=[1-9])\d*\.?\d+$
    

    它使用@WiktorStribiżew 提出的正则表达式作为this question 的注释来匹配十进制数字(^\d*\.?\d+$),并添加一个正向前瞻以确保数字的第一个字符不为 0。请注意,如果您想要允许像.3这样的数字,你应该将.添加到前瞻字符类,即^(?=[1-9.])\d*\.?\d+$

    Demo on regex101

    【讨论】:

      【解决方案3】:

      [1-9]+[0-9]*(\.[0-9]+)? 应该适用于您的情况。

      [1-9]+ 将确保表达式以不同于 0 的数字开头。

      [0-9]* 将确保表达式的第一个数字后有零。

      (\.[0-9]+)? 将允许对表达式进行扩展,该表达式必须有一个 . 并且后面至少有 1 个数字。最后的? 使其成为可选的。

      顺便说一句,我真的很喜欢这个网站来测试我的正则表达式:https://regexr.com/,你应该试试。

      【讨论】:

      • 如何匹配10
      • 3.05 不应该匹配?
      • 1x0 呢?
      • 是的,必须用[] 包裹. 以确保它只考虑. 字符,谢谢@Nick :)
      • 首选反斜杠(参见其他答案)。
      猜你喜欢
      • 2012-09-12
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多