验证英国电话号码 PHP



嗨,伙计们,我有这个条件。我希望我的电话号码仅在数字或长度在 10 或 11 位之间时才有效?

if ((preg_match ('/^(01|02|03|08)/', $value) == 0) || ((strlen($value) != 10) && (strlen($value) != 11)) ) {
        $this->_error(self::INVALID);
        $isValid = false;
    }

这是哪里出了问题?

从 if 中删除== 0,如果为 false,preg_match返回一个空字符串。将其替换为if((!preg_match(...) || ...)

在谷歌上快速搜索后,我找到了大量的答案。在询问之前,您确实应该做更多的研究。

这可能会有所帮助。它匹配长度为 10-11 位的任何数字输入,就像您问的那样。

$regex = "^([0-9]{10,11})$";
$input = $_POST['telephone_number']
if (preg_match($regex, $input)) {
    echo "Valid telephone number.";
} else {
    echo "Invalid telephone number.";
}

我建议坚持这种简单的验证,因为检查每种可能的电话号码格式可能会很烦人。例如,电话号码01424 730 234可以输入为:

01424730234
01424 730234
01424-730-234
01424 73 02 34
(01424) 730234

通过查看一个电话号码的所有变体,验证它成为一项艰巨而艰巨的任务。我建议从字符串中删除所有空格、破折号和括号,然后检查它是否都是数字和 10-11 位数字的长度。

像这样的事情会在验证发生之前从字符串中删除任何非数字内容:

$regex = "^([0-9]{10,11})$";
$input = $_POST['telephone_number']
$cleaned_input = preg_replace('/D/', '', $input); // leave only numbers
if (preg_match($regex, $cleaned_input)) {
    echo "Valid telephone number.";
} else {
    echo "Invalid telephone number.";
}

最新更新