【问题标题】:Extract numbers from phone number input field (PHP)从电话号码输入字段中提取数字(PHP)
【发布时间】:2012-03-09 04:22:21
【问题描述】:

我有一个电话号码输入字段,允许用户以他们想要的任何格式(555-555-5555、(555) 555 - 5555 等)添加电话号码。

由于它只是一个电话号码字段,我可以忽略除该字段中的数字之外的所有内容。

我目前正在使用以下代码。 它提取了所有的数字,但问题是它们没有按顺序排列——它的顺序很混乱。

如何按照数字在原始字符串中出现的顺序提取数字?

preg_match_all('/\d+/', $Phone, $matches);

$Phone = implode('', $matches[0]);

编辑:它们实际上并没有按此函数的混乱顺序 - 我将数字插入到 int(10) 数据库字段中,这导致了混乱。但是,下面的答案仍然是实现我的目标的更有效方式。

【问题讨论】:

    标签: php regex preg-match phone-number


    【解决方案1】:

    使用preg_replace 删除所有非数字:

    $numbers = preg_replace('/[^\d]/','',$Phone);
    

    注意:'[^\d]' 可以替换为 '\D'(在非 unicode 模式下安全)。

    【讨论】:

      【解决方案2】:
      $Phone = preg_replace('/[^\d]/', '', $Phone);
      

      【讨论】:

        【解决方案3】:

        为什么不直接替换字符串中不是数字的所有内容?

        $number = preg_replace("/[^0-9]/", '', $Phone);
        

        【讨论】:

        • 其他使用^\d的例子和你的^0-9有什么区别?
        • 无。 \d 只是一个转义序列,与字符类 [0-9] 相同。一些转义序列取决于语言环境设置,但我不相信 \d 是。见php.net/manual/en/regexp.reference.escape.php
        【解决方案4】:

        试试看

        if (!preg_match("/^[0-9\-]*$/",$Phone)) {
            echo "Only Numeric and strip (-)";
        }
        

        示例:

        好的:0877-9320-9356

        失败:0877 9320 9356087793209356

        【讨论】:

          猜你喜欢
          • 2021-08-15
          • 2020-07-28
          • 1970-01-01
          • 1970-01-01
          • 2017-10-15
          • 2012-06-19
          • 2022-12-09
          • 2023-03-16
          • 2013-10-01
          相关资源
          最近更新 更多