验证英国电话号码PHP

时间:2013-09-19 11:39:50

标签: php validation

大家好我有这种情况。我希望我的电话号码只有在数字或10到11位数之间才有效吗?

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

哪里出错了?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

经过快速谷歌搜索,我找到了大量答案。在询问之前你真的应该做更多的研究。

这可能会有所帮助。它匹配任何长度为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.";
}