【问题标题】:Is there a simple way to use FILTER_SANITIZE_NUMBER_INT to validate a phone number (in a form)?有没有一种简单的方法可以使用 FILTER_SANITIZE_NUMBER_INT 来验证电话号码(以表格形式)?
【发布时间】:2019-04-20 02:11:16
【问题描述】:

我正在尝试使用 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;
    }
}

【问题讨论】:

  • 电话号码不是整数。

标签: php html forms validation


【解决方案1】:

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

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

Demo on 3v4l.org

【讨论】:

    【解决方案2】:

    对于这种风格的正则表达式,我更喜欢使用 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";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 2011-05-21
      • 2019-01-26
      • 2020-05-02
      • 2013-03-08
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多