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
。示例:
-1
→FALSE
0
→FALSE
1
→1
+ 1
→FALSE
+2
→2
++3
→FALSE
4+
→FALSE
5.6
→FALSE
7,8
→FALSE
这保证你测试的数字是一个自然数(一个正整数除了它周围的数字之外没有任何其他字符,除了一个 +
在左边)。即使它前面有一个 +
,它也只会 return 数字本身。
虽然有一点小挫折,如果数字超过 2147483647,它也会 return FALSE
(maximum positive value for a 32-bit signed binary integer).
在 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
。示例:
-1
→FALSE
0
→FALSE
1
→1
+ 1
→FALSE
+2
→2
++3
→FALSE
4+
→FALSE
5.6
→FALSE
7,8
→FALSE
这保证你测试的数字是一个自然数(一个正整数除了它周围的数字之外没有任何其他字符,除了一个 +
在左边)。即使它前面有一个 +
,它也只会 return 数字本身。
虽然有一点小挫折,如果数字超过 2147483647,它也会 return FALSE
(maximum positive value for a 32-bit signed binary integer).