大家好我有这种情况。我希望我的电话号码只有在数字或10到11位数之间才有效吗?
if ((preg_match ('/^(01|02|03|08)/', $value) == 0) || ((strlen($value) != 10) && (strlen($value) != 11)) ) {
$this->_error(self::INVALID);
$isValid = false;
}
哪里出错了?
答案 0 :(得分:2)
从if中删除== 0
,preg_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.";
}