PHP:如何清理自然数(正INT)?

Arm*_*oot 5 php sanitization filter

PHP清理过滤器列表中,有一个清除整数的选项:

FILTER_SANITIZE_NUMBER_INT - 删除除数字,加号和减号之外的所有字符.

如果我们使用:

filter_var($var2San, FILTER_SANITIZE_NUMBER_INT);
Run Code Online (Sandbox Code Playgroud)

这将清理点.和逗号,,但+-迹象依然存在.例如:++++ --- 1.110,4 <b>m<sup>2</sup></b>被消毒了++++---111042.理想情况下,当数字为0时filter_var将返回false,即数字必须是自然数,更具体地说,是正整数.

因此,一个FILTER_SANITIZE_NUMBER_NATURAL方便...有没有解决方法或我需要一个RegExp?

Arm*_*oot 11

使用regexp函数似乎有点过分,因为还有另一种方法可以使用该filter_var函数:

filter_var($var2San, FILTER_VALIDATE_INT,
           array('options' => array('min_range' => 1)));
Run Code Online (Sandbox Code Playgroud)

FILTER_ VALIDATE _INT列在PHP过滤器标志下,没有定义特定标志(在$options数组中),filter_var如果有效则将检测并返回该数字,FALSE否则返回.例子:

  • -1FALSE
  • 0FALSE
  • 11
  • + 1FALSE
  • +22
  • ++3FALSE
  • 4+FALSE
  • 5.6FALSE
  • 7,8FALSE

这可以保证您测试的数字是一个自然数(除了左边的数字之外没有任何其他字符的正整数,除了+左边的数字).即使它+领先于它,它也只会返回数字本身.

但是有一个小的挫折,如果数字超过2147483647,它也将返回FALSE(32位有符号二进制整数的最大正值).

  • 还有`ctype_digit()`,它没有对其最大值的限制,但也不允许"+",千位分隔符,小数位等.这就像你使用了正则表达式一样" ^ [0-9] + $"来验证你的字符串,但显然要快得多. (2认同)
  • @Ghedipunk尽管只返回`false`或`true` [ctype_digit](http://php.net/manual/en/function.ctype-digit.php)似乎是一个非常好的选择,赞赏! (2认同)