-1

大家好,我有这种情况。我希望我的电话号码只有在它是数字或长度在 10 或 11 位之间时才有效?

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

这哪里出错了?

4

2 回答 2

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.";
}
于 2013-09-19T12:01:24.933 回答
2

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

于 2013-09-19T11:43:08.490 回答