【问题标题】:PHP: Validation of US Phone numbersPHP:验证美国电话号码
【发布时间】:2012-07-28 23:33:22
【问题描述】:

我目前正在验证美国电话号码。问题是下面的代码总是在有效或无效输入 Please enter a valid phone number 之后回显。我的代码的基本逻辑是我正在检查 preg_match 以查看是否有匹配的有效数字。 Example

我该如何解决这个问题,或者是否有更好的方法来验证电话号码? 另外,是否可以回显格式如下的数字:(123)456-7890

PHP

if (isset($_POST['phone'])) {
    if(preg_match('/^(\({1}\d{3}\){1}|\d{3})(\s|-|.)\d{3}(\s|-|.)\d{4}$/',$phone)) {
        echo ('<div id="phone_input"><span id="resultval">'.$phone.'</span></div>');
    }
    else {
        echo '<div id="phone_input"><span id="resultval">Please enter a valid phone number</span></div>';
    }
}

【问题讨论】:

  • 只需删除非数字并将其格式化为您想要的格式。像我这样的懒人不喜欢输入标点符号。

标签: php


【解决方案1】:

试试这个

<?php
class Validation {
    public $default_filters = array(

        'phone' => array(
            'regex'=>'/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/',
            'message' => 'is not a valid US phone number format.'
        )
    );
    public $filter_list = array();

    function Validation($filters=false) {
        if(is_array($filters)) {
            $this->filters = $filters;
        } else {
            $this->filters = array();
        }
    }

    function validate($filter,$value) {
        if(in_array($filter,$this->filters)) {
            if(in_array('default_filter',$this->filters[$filter])) {
                $f = $this->default_filters[$this->filters[$filter]['default_filter']];
                if(in_array('message',$this->filters[$filter])) {
                    $f['message'] = $this->filters[$filter]['message'];
                }
            } else {
                $f = $this->filters[$filter];
            }
        } else {
            $f = $this->default_filters[$filter];
        }
        if(!preg_match($f['regex'],$value)) {
            $ret = array();
            $ret[$filter] = $f['message'];
            return $ret;
        }
        return true;
    }
}

//example usage
$validation = new Validation();
echo nl2br(print_r($validation->validate('phone','555-555-1212'),true));
echo nl2br(print_r($validation->validate('phone','(555)-555-1212'),true));
echo nl2br(print_r($validation->validate('phone','555 555 1212'),true));
echo nl2br(print_r($validation->validate('phone','555.555.1212'),true));
echo nl2br(print_r($validation->validate('phone','(555).555.1212'),true));
echo nl2br(print_r($validation->validate('phone','(555)---555.1212'),true));//will not match
?>

【讨论】:

  • 但是如果有人喜欢将他们的电话号码写成 2234567890 或 (223)-555-9191 或 (445) 333-6969 怎么办?
  • 为什么是if(x) return true; else return false;?只是return x;。 (并不是说无论如何都应该使用它来验证电话号码......)
  • +1 @AbidHussain 谢谢,我是 php 新手。我如何在我的代码中调用class Validation
  • 类代码复制并粘贴另一个文件,就像validation.php一样。然后在您的文件中包含validation.php 顶部。前任。包括“validation.php”;然后使用//示例用法代码
猜你喜欢
  • 2012-05-22
  • 2010-09-15
  • 1970-01-01
  • 2011-03-22
  • 2011-09-21
  • 2011-08-16
  • 2014-07-24
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多