【问题标题】:What's the regular expression for positive whole numbers only? (zero is not allowed)仅正整数的正则表达式是什么? (不允许为零)
【发布时间】:2012-03-22 21:11:27
【问题描述】:

只有正整数的正则表达式是什么? (不允许为零)

我只能得到数字的正则表达式^\d+$。我一直在尝试在网上寻找一个,但已经一个小时了,所以我决定在 Stack Overflow 上发布它。

匹配:

1 || 2 || 444 || 9000 || 012

不匹配:

9.2 || -90

【问题讨论】:

  • 您尝试使用正则表达式进行算术比较是否有特殊原因?你知道你正在用猎枪杀死一只蜘蛛,对吧?
  • 不,我要用它来计算数量,我不希望用户允许 0、-1、2.3。只是正整数。
  • 使用 parseInt() 或类似的东西..
  • @ghoti 好像用瑞士刀剪线。
  • @ghoti 好主意,但is_numeric 允许负数、小数等。

标签: php regex validation


【解决方案1】:

这显然是:

[1-9]\d*

(一到九位后跟零位或多位数字。) 当然,这将排除 0190 之类的内容。

【讨论】:

    【解决方案2】:

    您可能正在寻找^[1-9]+$ 模式。它将匹配12452253 等。但不匹配1003。或0124。如果您想匹配第三个数字 (1003) 以及使用 ^[1-9]\d*$ 模式。

    在 php 中你会使用

    preg_match('/^[1-9]\d*$/', $subject, $matches)
    

    【讨论】:

    • 也谢谢您,先生,但我遇到了一个错误。 php.ini 中没有结束分隔符“^”。我如何解决它。再次感谢您,先生。
    • 您没有指定它的php。在 php 中使用 // 作为分隔符,所以模式将是 /^[1-9]\d*$/
    • 谢谢先生。正是我想要的。
    【解决方案3】:

    ^0*[1-9]\d*$ 将匹配除零以外的所有数字。

    【讨论】:

    • @TimPietzcker,*? 旨在成为 "lazy star" ,因为 * 本身就是贪婪的。我不认为像0* 这样简单的东西需要它(或有任何区别),但它仍然是有效的符号。
    • 它是有效的,但完全没用而且速度较慢,因为它会导致很多不必要的回溯。
    【解决方案4】:
    /^\+?([1-9]|0.)[0-9\.]*$/
    

    这种模式可能对您有所帮助,但我认为您必须具备编程语言技能才能进行算术检查。例如在 php 中。 “$is_positive = $input > 0”是的,就是这么简单:)

    【讨论】:

    • 谢谢您,先生。是的,我只是想在将值发送到数据库之前使用正则表达式来验证用户输入。再次感谢先生。
    【解决方案5】:

    试试这个

    [1-9]\d*|[0]*[1-9]\d*
    

    【讨论】:

      【解决方案6】:

      我知道您要求使用正则表达式,但您可以考虑

      $opts = array(
          'options' => array(
              'min_range' => 1,
              'max_range' => PHP_INT_MAX
          )
      );
      $n = filter_var($input, FILTER_VALIDATE_INT, $opts);
      

      【讨论】:

        【解决方案7】:

        这是一个允许 0 到 100 但不允许 01

        ^((([0]$)|[1-9][0-9]{0,1})|100)$

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-22
          相关资源
          最近更新 更多