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


Validate Phone Number and Zip Code PHP

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

到目前为止,这是我对电话号码字段的了解。

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

下一个 if 语句应检索类似于"请输入有效的电话号码。 示例:"0123456789"。

如果您不想使用正则表达式,请查看ctype_digit

例如:

if(strlen($phone)==10 && ctype_digit($phone)) {
    //valid
} else {
    //invalid
}

我无法证明这是否比正则表达式更快或更慢,但我认为这可能是没有意义的。 这或多或少是对您最有意义的。

你可以在这里尝试正则表达式:

if(preg_match('/^[0-9]{10}$/', $phone)){
    // valid
}else{
    // Not valid
}
有点

类似的东西将确保只有数字字符和其中的 10 个。只需将邮政编码的 10 更改为 5。

还有一件事,如果在访问它时未设置$_POST['phone'],您将获得一个E_NOTICE所以在这里为您提供一个提示:

$phone = isset($_POST['phone']) ? stripslashes($_POST['phone']) : null;
if(!$phone) // ERROR
$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 />";

请记住,这将不允许使用外国邮政编码(可能具有不同的长度或包含字母)


还有一些其他建议(以防止不必要的错误消息)

您可能希望处理您的用户输入,以便通过执行以下操作来1234567890 123-456-7890

preg_replace('/[^'d]/','',$input)

也许做一个trim($input)去掉前导/尾随空格


最后,您在 $_POST['phone'] 上使用条带斜杠有什么特别的原因吗?如果它们都像您期望的那样都是数字,那么这应该是不必要的。如果它们不都是数字,那么无论

怎么样:

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";

好吧,这是一个旧帖子,但无论如何我都会在这里发表一些评论。

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