PHP:如何对自然数(正整数)进行净化处理?

9

PHP过滤器列表中有一个选项可以用来清理整数:

FILTER_SANITIZE_NUMBER_INT - 移除所有数字、正负号以外的字符。

如果我们使用以下代码:

filter_var($var2San, FILTER_SANITIZE_NUMBER_INT);

这将清除点.和逗号,,但+-符号保留不变。例如:++++ --- 1.110,4 <b>m<sup>2</sup></b> 被清理为 ++++---111042。理想情况下,filter_var 在数字为0时应返回false,即数字必须是自然数,更具体地说,是正整数。

因此,一个FILTER_SANITIZE_NUMBER_NATURAL会很方便... 是否有解决方法或需要使用RegExp?

1个回答

18

使用正则表达式函数似乎有些过度,因为还有另一种使用filter_var函数的方法:

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

The FILTER_VALIDATE_INT是在PHP filters flags下列出的,若未定义特定标志(在$options数组中),则filter_var将检测并返回数字(如果有效),否则返回FALSE。例如:
  • -1FALSE
  • 0FALSE
  • 11
  • + 1FALSE
  • +22
  • ++3FALSE
  • 4+FALSE
  • 5.6FALSE
  • 7,8FALSE
这将确保你测试的数字是一个“自然数”(一个正整数,除了数字以外没有其他字符,除了左边的+)。即使它有一个+在前面,它也只会返回数字本身。但是如果这个数字超过了2147483647,它也会返回FALSE32位有符号二进制整数的最大正值)。

2
还有ctype_digit()函数,它在最大值上没有限制,但也不允许“+”、千位分隔符、小数点等。它实际上就像你使用正则表达式“^[0-9]+$”来验证字符串一样,只是速度更快。 - Ghedipunk
2
@Ghedipunk 尽管只返回 falsetruectype_digit 似乎是一个非常好的替代方案,感谢! - Armfoot
1
非常干净。喜欢它。 - levi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接