0

这是关于我昨天提出的前一个问题的另一个问题。我希望允许用户以下列格式输入美国电话号码。

(800)-555-1212

800-555-1212

并让它只检查数据库中的数字 8005551212

我见过像这样的正则表达式 /^[\+]?([0-9]*)\s*\(?\s*([0-9]{3})?\s*\)?[\s\-\.]*([0-9]{3})[\s\-\.]*([0-9]{4})[a-zA-Z\s\,\.]*[x\#]*[a-zA-Z\.\s]*([\d]*)/

可能有效,但我不确定如何通过我提供的链接将其实现到代码中

我是 php 新手,对正则表达式一无所知。任何帮助表示赞赏。

4

5 回答 5

11

此函数验证电话号码,如果有效则返回 true,如果无效则返回 false。这个函数非常简单,我被写到了。

    /**
     * @param $number
     *
     * @return bool
     */
    function validatePhoneNumber($number) {
        $formats = [
            '###-###-####', '####-###-###',
            '(###) ###-###', '####-####-####',
            '##-###-####-####', '####-####', '###-###-###',
            '#####-###-###', '##########', '#########',
            '# ### #####', '#-### #####'
        ];

        return in_array(
            trim(preg_replace('/[0-9]/', '#', $number)),
            $formats
        );
    }
于 2013-08-08T07:10:27.427 回答
0

回复:Rohan Kumar 的解决方案

<?php
$t='/\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/';
$arr=preg_match($t,'(800)-555-1212',$mat);
$arr=preg_match($t,'800-555-1212',$mat);
print_r($mat);
?>

确实解决了虚假电话号码的问题,例如 800-123-2222。真实电话号码的第一位数字至少为“2”。虽然其他解决方案的格式正确,但它们没有解决人们输入电话号码(如 800-000-1234)的问题,这在提供的其他解决方案中是正确的。

于 2014-01-08T15:30:48.017 回答
0

尝试这个,

<?php
    $t='/\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/';
    $arr=preg_match($t,'(800)-555-1212',$mat);
    $arr=preg_match($t,'800-555-1212',$mat);
    print_r($mat);
?>

在这里测试

于 2013-08-08T07:57:28.727 回答
0

您可以使用此模式

\(?\d{3,3}\)?-\d{3,3}-\d{4,4}

于 2013-08-08T07:10:46.837 回答
0

如果 javascript 是好的可以去

<script type="text/javascript">
function matchClick() {
  var re = new RegExp("Your regex here");
  if (document.formname.phone.value.match(re)) {
     alert("Ok");
     return true;
  } else {
     alert("Not ok");
     return false;
  }
} 
</script>

在表单提交或文本框模糊时调用此函数

如果您对您的正则表达式有疑问,您可以在http://www.regular-expressions.info/javascriptexample.html进行验证

于 2013-08-08T07:10:17.017 回答