有没有一种简单的方法可以使用FILTER_SANITIZE_NUMBER_INT验证电话号码(以表格形式)?

时间:2019-04-20 02:11:16

标签: php html forms validation server

我正在尝试使用PHP验证电话号码,并且想知道是否可以使用FILTER_SANITIZE_NUMBER_INT而不是正则表达式来进行验证。

我需要密码来强制执行xxx-xxx-xxxx格式(允许'-'),并且最大长度为12个字符。

到目前为止,这是我的代码。这项工作是否可以验证xxx-xxx-xxxx格式的任何数字?

$phone = clean_input($_POST["phone"]);
if (empty($phone)) {
    $phoneErr = "Valid phone number required";
    $isValid = false;
} else {
    if (!filter_var($phone, FILTERSANITIZE_NUMBER_INT)) ;
    $phone_to_check = str_replace("-", "", $filtered_phone_number);
    if (strlen($phone_to_check) < 10 || strlen($phone_to_check) > 12) {
        $isValid = false;
    }
}

2 个答案:

答案 0 :(得分:0)

我会改用preg_match,因为您可以在一份声明中满足您的所有需求。此正则表达式可确保该值必须具有10位数字,并在第三和第六位数字后加上可选的-

$phone = clean_input($_POST["phone"]);
$isValid = preg_match('/^\d{3}-?\d{3}-?\d{4}$/', $phone);

Demo on 3v4l.org

答案 1 :(得分:0)

我更喜欢将preg_match()函数用于这种正则表达式。

基于您的模式的示例

$phone = '000-000-0000';

if(preg_match("/^[0-9]{3}-[0-9]{3}-[0-9]{4}$/", $phone)) {
  // $phone is valid
}

要使用FILTER_SANITIZE_NUMBER_INT()进行验证,请尝试下面的代码

function validate_phone_number($phone)
{

     $filtered_phone_number = filter_var($phone, FILTER_SANITIZE_NUMBER_INT); 
     if (strlen($filtered_phone_number) < 12) {
        return false;
     } else {
       return true;
     }
}

下面是我们刚刚创建的函数的用法:

$phone = "444-444-5555";
if (validate_phone_number($phone) == true) {
   echo "Phone number is valid";
} else {
  echo "Invalid phone number";
}