嗨,伙计们,我有这个条件。我希望我的电话号码仅在数字或长度在 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.";
}