Php 电话号码格式化

Php 电话号码格式化,php,web-applications,format,phone-number,prefix,Php,Web Applications,Format,Phone Number,Prefix,使用第三方web应用程序的API,我检索客户的数据,包括电子邮件、国家/地区、电话号码等 假设我有一个客户在web应用程序中错误地插入了电话号码。我创建了两种类型的检查来更正电话号码: //phone prefix totally missing if( substr($phone_number, 0, 1) != '+' ) { if( substr($phone_number, 0, 2) == '00' ) { $phone_number = '+'.substr(

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

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

//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 39XXXXXX”,其中第一个“39”是意大利语前缀,没有缺少+符号(因此,电话号码不正确)

在这种情况下,我完全迷路了,因为如果我删除“39”,那么我也会删除一半的数字;如果我在“39”中加上+的话,我就有可能出现“+39+39+39xxxxxx”这样的情况

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


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

使用库,遵循此链接

考虑到前缀是第一个字符,你不能检查它是否存在,如果没有,你会添加它吗?你对RegEx感到满意吗?@Synapsis是的,我可以,但是我描述的数字
39 39xxxxxx
的情况如何?我会添加另一个+39,这将生成14个密码,包括前缀,这是不正确的。@Cid老实说,没有那么多。。但是你的建议是什么呢?这只是一个想法,但是如果你对RegEx不满意,那会给你一些你无法维护的代码,只有答案是错误的。包括一些来自网站的代码,因为如果代码被删除,那么它将不再对将来遇到相同问题的人有用。我已经注意到了这个库,无论如何,谢谢。没有那个图书馆,还有其他办法解决这个问题吗?与我的web应用程序集成会很复杂。