简单的RegEx更改电话号码验证

时间:2012-08-23 08:41:32

标签: php regex

我有这个功能来检查我的电话号码:

function isValid( $what, $data ) {

        switch( $what ) {

                // validate a phone number
                case 'phone_number':
                        $pattern = "/^[0-9-+]+$/";

                break;



                default:
                        return false;
                break;

        }
        return preg_match($pattern, $data) ? true : false;
}

我想更改该正则表达式以接受以下内容:) (字符,如(800)和space

例如,这个数字将通过验证,现在没有通过:

+1(201)223-3213

4 个答案:

答案 0 :(得分:7)

让我们一步一步地构建正则表达式。还要考虑在匹配之前修剪空格。

  • 一开始可能有也可能没有+号。这也需要转义。 \+?
  • 然后是带括号[0-9]+的部分之前的一个或多个数字。如果数字可以直接从括号中的组开始,则可能需要写[0-9]*
  • 然后,可选地在括号中出现一组数字:(\[0-9]+\)?。假设只允许一个这样的组
  • 然后是本地电话号码,也允许使用连字符:[0-9-]*
  • 最后一个字符必须是数字[0-9],此处不允许使用连字符

    ^\+?[0-9]+(\([0-9]+\))?[0-9-]*[0-9]$
    

查看结果here。修剪空间看起来像$trimmed = str_replace(' ', '', $pattern);

答案 1 :(得分:3)

这个正则表达式怎么样:

/^[0-9-+()\s]+$/

在行动here

中查看

答案 2 :(得分:1)

'/\(?\b[0-9]{3}\)?[-. ]?[0-9]{3,5}[-. ]?[0-9]{4,8}\b/'

答案 3 :(得分:1)

由于您似乎正在使用此进行验证,因此可以使用str_replace('[\s\+\-\(\)]', '', $data)来获取应该(如果电话号码有效)仅包含数字的字符串。然后,您可以通过运行preg_match('\d{11}', $data)轻松测试此假设({11}表示11位,如果允许范围,则使用min,max,如{min,max},例如\d{10,11}

值得注意的是,这并不像Lorlin的回答那么彻底,因为你忽略了括号+- s的任何无效使用。您可能希望使用两者的组合,或者最适合您需要的任何组合。