PHP: 如何净化一个自然数(正整数)?

PHP: How to sanitize a natural number (positive INT)?

PHP sanitize filters 列表中,有一个清理整数的选项:

FILTER_SANITIZE_NUMBER_INT - Remove all characters except digits, plus and minus sign.

如果我们使用:

filter_var($var2San, FILTER_SANITIZE_NUMBER_INT);

这将清除点 . 和逗号 ,,但保留 +- 符号。例如:++++ --- 1.110,4 <b>m<sup>2</sup></b> 被清理为 ++++---111042。理想情况下 filter_var would return false when the number was 0, i.e. the number would have to be a natural number,更具体地说,是一个正整数。

因此 FILTER_SANITIZE_NUMBER_NATURAL 会很方便...对此有解决方法还是我需要 RegExp?

使用 regexp 函数似乎有些过分,因为还有另一种使用 filter_var 函数的方法:

filter_var($var2San, FILTER_VALIDATE_INT,
           array('options' => array('min_range' => 1)));

FILTER_VALIDATE_INT 列在 PHP filters flags 下并且没有定义特定标志(在 $options 数组中),filter_var 将检测并 return 数字是否有效,否则 returning FALSE。示例:

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

这保证你测试的数字是一个自然数(一个正整数除了它周围的数字之外没有任何其他字符,除了一个 + 在左边)。即使它前面有一个 +,它也只会 return 数字本身。

虽然有一点小挫折,如果数字超过 2147483647,它也会 return FALSE (maximum positive value for a 32-bit signed binary integer).