5

我正在使用 PHPfilter_validate_int执行简单的电话验证。长度应该正好是 10 个字符,并且都应该是数字。但是,由于大多数电话号码都以 0 开头。过滤器验证 int 函数返回 false。有没有办法解决这个问题。这是我使用的代码

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

6 回答 6

6

您无法做任何事情来进行此验证。在任何情况下,您都不应该使用FILTER_VALIDATE_INT,因为电话号码不是整数;它们是一串数字

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

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

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

if (strlen($tel) == 10 && ctype_digit($tel)) // it's valid
于 2013-09-20T08:29:55.413 回答
2

使用preg_match

$str = '0123456789';

if(preg_match('/^\d{10}$/', $str))
{
    echo "valid";
} 
else 
{
    echo "invalid";
}
于 2013-09-20T08:31:50.577 回答
1

您可以使用正则表达式:

if (!preg_match('~^\d{10}$~', $value)) return false;
于 2013-09-20T08:29:34.147 回答
1

这是一个 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");
}
于 2020-12-10T10:02:10.740 回答
-1

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

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

于 2013-09-20T08:27:17.727 回答
-1

可能您需要检查返回是 false 还是 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

于 2013-09-20T08:32:16.913 回答