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


simple RegEx changes for phone number validation

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

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

让我们一步一步地构造正则表达式。还要考虑在匹配之前对空间进行修剪。

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

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

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

这个regexp:怎么样

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

点击此处查看操作

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

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

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