【问题标题】:Phone number formatting PHP电话号码格式化 PHP
【发布时间】:2020-02-05 14:08:52
【问题描述】:

使用第三方 Web 应用程序的 API,我检索客户的数据,包括电子邮件、国家、电话号码等。

假设我有一位客户在该网络应用程序中错误地插入了一个电话号码。我创建了两种类型的支票来更正电话号码:

//phone prefix totally missing
if( substr($phone_number, 0, 1) != '+' ) {
    if( substr($phone_number, 0, 2) == '00' ) {
        $phone_number = '+'.substr($phone_number, 2);
    } else {
        $phone_number = $this->params['prefix'].$phone_number;
    }
}


// double prefix prevention (since October 2019)
if (substr($phone_number, 0, 1) == '+' && substr($phone_number, 0, 3) == substr($phone_number, 3, 3)) {
    $phone_number = substr($phone_number, 3);
} else if(substr($phone_number, 0, 1) == '+' && substr($phone_number, 0, 2) == substr($phone_number, 2, 2)) {
    $phone_number = substr($phone_number, 2);
} else if(substr($phone_number, 0, 1) == '+' && substr($phone_number, 0, 4) == substr($phone_number, 4, 4)) {
    $phone_number = substr($phone_number, 4);
}



还是有问题。假设客户插入了以下不正确的电话号码:“39 3939xxxxxx”,其中第一个“39”是意大利语前缀,没有缺少 + (因此,电话号码不正确)。

在这种情况下,我完全迷失了,因为如果我删除“39”,那么我也会删除一半的数字;如果我在“39”上添加一个+,我就有可能得到类似“+39+39+39xxxxxx”的东西。

主要问题是我不知道前缀是否包含在数字中,所以我被困在这里,因为我不知道什么样的控制实现而不会留下任何误差。

编辑:我注意到有一个谷歌库可以帮助解决这个问题,但目前将它集成到我的网络应用程序中对我来说是个问题。

【问题讨论】:

  • 考虑到前缀是第一个字符,你不能检查它是否存在,如果没有,你会添加它吗?
  • 您对 RegEx 感到满意吗?
  • @Synapsis 是的,我可以,但是我描述的数字39 3939xxxxxx 的情况呢?我会添加另一个 +39,这将生成包括前缀在内的 14 个密码,这是不正确的。
  • @Cid 老实说,没那么多......但你有什么建议?
  • 这只是一个想法,但如果您对 RegEx 不满意,那将给您一些无法维护的代码

标签: php web-applications format phone-number prefix


【解决方案1】:

【讨论】:

  • 仅链接的答案不好。包含来自网站的一些代码,因为如果代码被删除,那么对于将来遇到相同问题的人将不再有用
  • 我已经注意到那个库了,谢谢。如果没有那个库,还有其他方法可以解决这种情况吗?与我的 Web 应用程序集成会很复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2015-10-02
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多