【问题标题】:Regex allowing spaces (for a Phone number regex)允许空格的正则表达式(对于电话号码正则表达式)
【发布时间】:2011-08-27 01:53:48
【问题描述】:

我有这个正则表达式:

preg_match("#^([0-9]+)$#", $post['telephone'])

谁只允许数字(对于法语类型的电话号码,所以 0123456789),但我想允许空格。例如允许这种类型的字符串:“01 23 45 67 89”。

你能帮帮我吗?

【问题讨论】:

    标签: php regex phone-number


    【解决方案1】:

    例如,如果您希望精确到 8 位,但仍允许任意数量的空白字符,则以下方法非常好:

    ^(?:\s*\d){8}$

    或者,如果你也想允许破折号:

    ^(?:\s*-*\s*\d){8}$

    【讨论】:

      【解决方案2】:

      如果可以在字符串中的任何位置使用空格,那么很简单,只需将其添加到您的字符类中

      preg_match("#^([0-9 ]+)$#", $post['telephone'])
      

      但这将允许开头有 5 个空格。

      ^\d{2}(?: ?\d+)*$
      

      会更复杂一点。以两位数字开头,然后是一个可选组,以可选空格开头,后跟至少 1 位数字。该组可以重复 0 次或多次。

      这将匹配

      01 23 45 67 89

      0123456789

      01234 5679

      【讨论】:

        【解决方案3】:

        这个去掉了除数字、空格和破折号之外的任何内容。

        $input = '0123?> Abc -_#';
        $output = preg_replace('#[^0-9- ]#', '', strtolower($input));
        echo($output);
        

        您只想验证(匹配和中止)还是清理、尝试清理并继续?

        【讨论】:

          【解决方案4】:

          刚遇到同样的问题,如果有人遇到这个问题,我已经创建了这个正则表达式:

          (?:((?:\+|00)(?:33|33\s0))|0)\s*[1-9](?:[ ]\d{2}){4}
          

          演示:https://regex101.com/r/aFIwp7/1

          它将涵盖手机号码和非手机号码的所有法语选项。

          【讨论】:

          • regex101 链接始终是一个很好的补充,但您仍然应该将正则表达式放在您的答案中,以防止它因为“仅链接答案”而被删除。
          【解决方案5】:

          这个怎么样?

          preg_match("/^\d(\s*\d)*$/", $post['telephone'])
          

          【讨论】:

            猜你喜欢
            • 2015-03-29
            • 1970-01-01
            • 2019-05-23
            • 2017-09-23
            • 2014-02-15
            • 1970-01-01
            相关资源
            最近更新 更多