【发布时间】: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