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

问题描述 投票:5回答:5

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

if(!filter_var($value, FILTER_VALIDATE_INT) || strlen($value) != 10) return false;
php validation filter-var
5个回答
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

1
投票

您可以使用正则表达式:

if (!preg_match('~^\d{10}$~', $value)) return false;

1
投票

使用preg_match

$str = '0123456789';

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

0
投票

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

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


-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

© www.soinside.com 2019 - 2024. All rights reserved.