PHP 过滤器验证第一个字符为 0 时的 int 问题


PHP filter validate int issue when first character is 0

我正在使用PHP filter_validate_int来执行简单的电话验证。长度应正好为 10 个字符,并且所有字符都应为数字。但是,由于大多数电话号码都以 0 开头。筛选器验证 int 函数返回 false。无论如何都可以解决此问题。这是我使用的代码

if(!filter_var($value, FILTER_VALIDATE_INT) || strlen($value) != 10) return false;

您无法执行任何操作来使此验证正常工作。无论如何,您都不应该使用FILTER_VALIDATE_INT因为电话号码不是整数;它们是数字字符串

如果要确保$tel是一个正好由 10 位数字组成的字符串,您可以使用正则表达式:

if (preg_match('/^'d{10}$/', $tel)) // it's valid

或者(也许更好)一些老式的字符串函数:

if (strlen($tel) == 10 && ctype_digit($tel)) // it's valid

使用 preg_match

$str = '0123456789';
if(preg_match('/^'d{10}$/', $str))
{
    echo "valid";
} 
else 
{
    echo "invalid";
}

您可以使用正则表达式:

if (!preg_match('~^'d{10}$~', $value)) return false;
这是一个

PHP错误 - #43372

正则表达式很好,但会消耗一些资源。

这适用于任何整数,包括零和前导零

if (filter_var(ltrim($val, '0'), FILTER_VALIDATE_INT) || filter_var($val, FILTER_VALIDATE_INT) === 0) {
    echo("Variable is an integer");
} else {
    echo("Variable is not an integer");
}

0 不是 int 的有效起始数。 0 是八进制数的起始数。

电话号码是字符串,而不是整数。您必须使用正则表达式来验证它。

可能需要检查返回值是假还是 0。筛选器在验证成功时返回输入,或在验证失败时返回 false。

使用严格的比较(=== 或 !==)进行比较,如 $result!==false。

if(filter_var($squid, FILTER_VALIDATE_INT)!==false ) {
 //if it's here, it passed validation
}

您还可以使用is_numeric功能:http://php.net/manual/en/function.is-numeric.php