我正在尝试验证一个电话号码,并要求它只有10位数字,不允许空格或特殊字符(例如:0123456789),除了5位数外,邮政编码也是如此(例如:01234)。
这就是我目前为电话号码字段提供的内容。
$phone = stripslashes($_POST['phone']);
if(!$phone || $phone == "Phone Number*")
{
$error .= "Please enter your phone number.<br />";
}
下一个if语句应该检索类似于“请输入有效的电话号码的错误。例如:”0123456789“。
答案 0 :(得分:8)
如果您不想使用regular expressions,请查看ctype_digit
例如:
if(strlen($phone)==10 && ctype_digit($phone)) {
//valid
} else {
//invalid
}
我无法证明这是否比正则表达更快或更慢,但我认为这可能没有实际意义。这或多或少是对你最有意义的。
答案 1 :(得分:2)
你可以在这里试试正则表达式:
if(preg_match('/^[0-9]{10}$/', $phone)){
// valid
}else{
// Not valid
}
有点像这样的东西只能确保数字和10个。只需将邮政编码更改为10即可。
如果在您访问时未设置$_POST['phone']
,还有一件事情,您将获得E_NOTICE
,所以这里只是提示:
$phone = isset($_POST['phone']) ? stripslashes($_POST['phone']) : null;
if(!$phone) // ERROR
答案 2 :(得分:1)
$phone = stripslashes($_POST['phone']);
if(!$phone || $phone == "Phone Number*")
{
$error .= "Please enter your phone number.<br />";
}
if(!preg_match('/^\d{10}$/', $phone)) $error .= "Please enter phone number as ##########.<br />";
对于邮政编码
if(!preg_match('/^\d{5}$/', $zip)) $error .= "Please enter your zip code as #####.<br />";
请注意,这不允许使用外国邮政编码(可能包含不同长度或包含字母)
也是其他一些建议(以防止不必要的错误消息)
您可能希望通过执行类似
的操作来处理您的用户输入,使123-456-7890变为1234567890 preg_replace('/[^\d]/','',$input)
也许做一个trim($input)
去除前导/尾随空格
最后,你有什么特别的理由在$ _POST ['phone']上使用stripslashes吗? 如果它们都是您期望的全部数字,那么这不一定是必要的。 如果它们不是全部数字,那么无论
,都会抛出错误答案 3 :(得分:0)
怎么样:
function check($number,$length)
{
if(ctype_digit ($number) && strlen($number)==$length)
return true;
else
return false;
}
if(check("1234",4))
echo "ok";
else
echo "Please enter a valid phone number. Example: "0123456789";
答案 4 :(得分:0)
嗯,这是一篇很老的帖子,但无论如何我会在这里发表一些评论。
1)你真的不应该强迫用户输入正确的数字,当然你在前端的验证将涵盖这一点,但绝不假设它是进入“后端”的情况。
请考虑以下内容,而不是将其放在用户身上:
// remove chars
$number = preg_replace('/[\D]/', '', $number);
//unit test sanitizer
filter_var($number, FILTER_SANITIZE_NUMBER_INT)
// check number
preg_match('/^[0-9]{10}$/', $zip)
示例:读入用户输入,如果输入足够的数字查找最接近的匹配邮政编码等。(我实际上在网站上使用过一次)当然设置前端检查是有用的,但如果失败。
$number = 'z 02012s';
// remove chars
$number = preg_replace('/[\D]/', '', $number);
//unit test sanitizer
$number = filter_var($number, FILTER_SANITIZE_NUMBER_INT);
// check number
if (preg_match('#^[0-9]{5}$#', $number) === 1) {
//(optional) lookup closest zip using your DB.
$look_zip = $db->getClosestZipMatch($number);
} else {
echo $number . " isn't 5 digits only, do something.";
}