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

Abu*_*ude 4 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;
}
Run Code Online (Sandbox Code Playgroud)

我想改变那个正则表达式接受以下内容:) (chars like(800)和space.

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

+1(201)223-3213

Lor*_*lin 7

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

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

    ^\+?[0-9]+(\([0-9]+\))?[0-9-]*[0-9]$
    
    Run Code Online (Sandbox Code Playgroud)

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