我想知道,验证整数的最佳方法是什么。 我也喜欢这个用字符串,所以我可以像
一样(string)+00003 - > (int)3(有效)
(string)-027 - > (int)-27(有效)
(int)33 - > (int)33(有效)
(string)'33a' - > (假)(无效)
这就是我到目前为止所做的:
function parseInt($int){
//If $int already is integer, return it
if(is_int($int)){return $int;}
//If not, convert it to string
$int=(string)$int;
//If we have '+' or '-' at the beginning of the string, remove them
$validate = ($int[0] === '-' || $int[0] === '+')?substr($int, 1):$int;
//If $validate matches pattern 0-9 convert $int to integer and return it
//otherwise return false
return preg_match('/^[0-9]+$/', $validate)?(int)$int:FALSE;
}
据我测试,此功能有效,但看起来像是一种笨拙的解决方法。
有没有更好的方法来编写这种功能。我也试过了
filter_var($foo, FILTER_VALIDATE_INT);
但它不接受'0003',' - 0'等值。
答案 0 :(得分:6)
您可以尝试ctype_digit或is_numeric
答案 1 :(得分:2)
有一个名为intval()的本机函数。这就是你要找的东西吗?
答案 2 :(得分:1)
它不接受“0003”因为它不是'清除'整数。整数不能从零开始,但它可以是负数(注意你用你的函数删除' - ')。 如前所述,请使用ctype_digit或is_numeric
答案 3 :(得分:0)
你可以像雅各布建议的那样使用intval。
但是,如果你想要一个Locale aware int validation class,那么我建议使用Zend Framework的Zend_Validate_Int验证器。
<强>用法强>
<?php
$v = new Zend_Validate_Int();
if ($v->isValid($myVal)) {
// yay
} else {
// fail
}
请注意,由于Zend Framework的选择结构,您不需要在整个应用程序中使用它。验证器对Zend_Locale的依赖性最小,用于区域设置感知验证和Zend_Registry。
答案 4 :(得分:0)
快速而肮脏的方式,据我所知,不会处理'0003'。
function parseInt($in) {
return ($in == intval($in) ? $in : false);
}
答案 5 :(得分:0)
你也可以使用PEAR的Validate包; http://pear.php.net/manual/en/package.validate.validate.number.php
各种选项是: