验证电话号码和邮政编码PHP

时间:2012-08-13 21:34:05

标签: php html css post

我正在尝试验证一个电话号码,并要求它只有10位数字,不允许空格或特殊字符(例如:0123456789),除了5位数外,邮政编码也是如此(例如:01234)。

这就是我目前为电话号码字段提供的内容。

$phone = stripslashes($_POST['phone']);

if(!$phone || $phone == "Phone Number*")
{
$error .= "Please enter your phone number.<br />";
}

下一个if语句应该检索类似于“请输入有效的电话号码的错误。例如:”0123456789“。

5 个答案:

答案 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.";
}