【问题标题】:How to remove initial (on the left) "+" or "0" from a telephone number string?如何从电话号码字符串中删除初始(左侧)“+”或“0”?
【发布时间】:2013-06-16 05:26:17
【问题描述】:

我需要一个 PHP 中的正则表达式来从电话号码字符串中删除数字开头的 + 或 0。

我有这个功能可以删除每个非数字字符

ereg_replace("[^0-9]", "", $sPhoneNumber)

但我需要更好的东西,所有这些例子都应该是......

$sPhoneNumber = "+3999999999999"
$sPhoneNumber = "003999999999999"
$sPhoneNumber = "3999999999999"
$sPhoneNumber = "39 99999999999"
$sPhoneNumber = "+ 39 999 99999999"
$sPhoneNumber = "0039 99999999999"

...像这样

$sPhoneNumber = "3999999999999"

任何建议,非常感谢!

【问题讨论】:

  • 你想让“003999999999999”变成“3999999999999”吗?如果数字合法地以 0 开头怎么办?
  • @mbratch 不起作用。例如取这个数字:“909984302”,您的表达式将导致“9998432”
  • @mbratch 仍然会导致相同的结果

标签: php regex string ereg-replace


【解决方案1】:

作为正则表达式的替代,您可以使用ltrim()

echo ltrim('003999999999999', '+0');

第二个参数是一个字符列表字符串,在你的例子中是+0

注意:这不会删除字符串中的空格,只会删除开头的+0

【讨论】:

    【解决方案2】:

    你可以这样做:

    $result = preg_replace('~^[0\D]++|\D++~', '', $sPhoneNumber);
    

    【讨论】:

      【解决方案3】:

      要删除开头的+0,这应该可以工作

      ereg_replace('^(\+|0)+?', '', $sPhoneNumber);

      【讨论】:

        【解决方案4】:

        之后只需 intval() 即可删除前导零。

        【讨论】:

          【解决方案5】:

          只需通过几个替代案例来扩展您的表达方式:

          ereg_replace("^\+|^00|[^0-9]", "", $sPhoneNumber)
          

          http://ideone.com/fzj16b

          【讨论】:

          • 这在“039 99999999999”上不起作用,您只设置了一个精确的零(一)个数,我希望它是通用的
          • @axel 只需添加更多案例,或​​使用^0+ 而不是^00。我只是给你指明了方向。
          • 我明白@Tomalak,但我不能无限加零,我不知道客户可以添加多少个零,我必须防止错误。
          • @axel 但是^0+ 意味着一个不确定的零个数。
          • 那是真的 ;),抱歉我没有沉迷于正则表达式
          【解决方案6】:

          说实话,您根本不需要正则表达式。这也是一个干净的解决方案。

          // first remove spaces
          // trim + and 0 characters at the beginning
          ltrim(str_replace(' ', '', $sPhoneNumber), '+0');
          

          这是我的测试代码

          <?php
          $sPhoneNumber[0] = "+3999999999999";
          $sPhoneNumber[1] = "003999999999999";
          $sPhoneNumber[2] = "3999999999999";
          $sPhoneNumber[3] = "39 99999999999";
          $sPhoneNumber[4] = "+ 39 999 99999999";
          $sPhoneNumber[5] = "0039 99999999999";
          
          foreach ($sPhoneNumber as $number) {
              $outcome = ltrim(str_replace(' ', '', $number), '+0');
              echo $number . ':' . "\t" . $outcome . '(' . ($outcome === '3999999999999' ? 'true' : 'false') . ')' . "\n";
          }
          

          【讨论】:

            猜你喜欢
            • 2023-02-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-10
            • 2014-03-26
            相关资源
            最近更新 更多