1

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

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

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

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

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

4

5 回答 5

10

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

例如:

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

我无法证明这是否会比正则表达式更快或更慢,但我认为它可能没有实际意义。这或多或少对你来说最有意义。

于 2012-08-13T21:39:17.703 回答
2

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

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
于 2012-08-13T21:37:49.267 回答
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 有什么特别的原因吗?如果它们都是您期望的数字,那么这不是必需的。如果它们不是所有数字,那么无论如何你都会抛出错误

于 2012-08-13T21:40:41.183 回答
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";
于 2012-08-13T21:46:06.987 回答
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.";
}
于 2017-08-29T13:45:37.917 回答