PHP验证整数

时间:2010-04-04 15:53:02

标签: php validation integer

我想知道,验证整数的最佳方法是什么。 我也喜欢这个用字符串,所以我可以像

一样

(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'等值。

6 个答案:

答案 0 :(得分:6)

您可以尝试ctype_digitis_numeric

答案 1 :(得分:2)

有一个名为intval()的本机函数。这就是你要找的东西吗?

答案 2 :(得分:1)

它不接受“0003”因为它不是'清除'整数。整数不能从零开始,但它可以是负数(注意你用你的函数删除' - ')。 如前所述,请使用ctype_digit或is_numeric

答案 3 :(得分:0)

你可以像雅各布建议的那样使用intval

但是,如果你想要一个Locale aware int validation class,那么我建议使用Zend FrameworkZend_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

各种选项是:

  1. decimal(mixed) - 十进制字符或不允许十进制时为false。例如 ”,。”允许两个“。”和“,”。
  2. dec_prec(int) - 允许的小数位数。
  3. min(float) - 最小值。
  4. max(float) - 最大值。