从电话号码确定国家
Determine Country from Telephone Numbers
我在 SO 上看到了一些与我要求的类似的问题,但似乎没有什么符合我的要求。
我现在的位置是需要处理通话记录,用phone号码判断国家。拨打的号码可以是任何国家,例如:
44 7899455120 - 英国
34 965791845 - 西班牙
355 788415235 - 阿尔巴尼亚
显然,如果所有呼叫代码都是两位数,世界将会很美好,但事实并非如此。目前,我有一个包含国家及其相关代码的数据库,为了匹配,我需要有效地获取数字的第一位数字,即英国示例的 4
并查询数据库,例如:
SELECT * from countries WHERE code LIKE '4%'
例如,这可能会给我 20 个结果。所以我再次循环并说
SELECT * from countries WHERE code LIKE '44%'
这可能给我说一个结果,现在我可以确定是英国了。然而,一些代码如阿尔巴尼亚是三位数,需要更多的循环和数据库调用。这看起来很简陋且效率低下,但我想不出另一种方法来实现这一目标。我意识到对数据库的三个调用可能看起来并不多,但如果您有 1000 个调用要处理,它们很快就会加起来。
看下面的问题:
What regular expression will match valid international phone numbers?
似乎有一些关于根据国家代码验证数字的重要信息,但关于根据数字确定国家代码的信息却不多。任何关于更清洁方法的意见或建议将不胜感激。
为清楚起见,显示了 phone 中的空格
假设 phone 永远是这样的:
$phone = "355 788415235"; // Albania
$parts = explode(" ", $phone);
$code = $parts[0]; // First part separated by space, 355.
然后直接按那个查询。不需要正则表达式。
如果不是这种情况,请考虑在输入级别将国家/地区代码与数字分开。
在您的系统上,每个 phone 号码在国家代码后都有白色 space,因此您可以使用它来确定国家/地区。
创建一个包含所有国家/地区代码的 table。喜欢
编号 |国家 |代码
1 |火鸡 | 90
2 |西班牙 | 34
(有一个table给你:http://erikastokes.com/mysql-help/country.sql.txt)
比爆炸你的 phone 号码。分隔符为白色 space " ".
$phoneNumber = "355 788415235";
$countryCode = explode(" ",$phoneNumber); // it divides phone number to two parts.
$countryCode = $countryCode[0]; // it returns 355. We write index 0 because country code is first part.
//Now you can call your country by country code.
$sqlQuery ="SELECT country FROM yourTableName WHERE code = '$countryCode' ";
...
//it will works like a charm. Because i currently using this.
国家代码中没有重叠歧义。含义:国家代码 11 是非法的,因为 1 分配给了北美。同理,20是埃及,没有其他20开头的国家代码。而21开头的国家代码都是3位。
由于没有重叠歧义,您可以在一个查询中直接搜索 phone 号码 12125551212 的国家代码,如下所示:
select country
, code
from countrycodes
where code in ('121', '12', '1')
同样,没有国家代码 121 或 12,因此唯一匹配的标准是 1。
存在一个库,可以解析一串数字并将其重新格式化为国际标准(数字如 4402081231234 到“+44 20 8123 1234”)。它还将 return Phone 号码区域,'GB' 或 'US' 来自号码,如果号码中嵌入了国家/地区代码。
https://github.com/googlei18n/libphonenumber 原库在Java,但在Javascript、Python、Ruby和[=18=中也有版本],等等。
我在 SO 上看到了一些与我要求的类似的问题,但似乎没有什么符合我的要求。
我现在的位置是需要处理通话记录,用phone号码判断国家。拨打的号码可以是任何国家,例如:
44 7899455120 - 英国
34 965791845 - 西班牙
355 788415235 - 阿尔巴尼亚
显然,如果所有呼叫代码都是两位数,世界将会很美好,但事实并非如此。目前,我有一个包含国家及其相关代码的数据库,为了匹配,我需要有效地获取数字的第一位数字,即英国示例的 4
并查询数据库,例如:
SELECT * from countries WHERE code LIKE '4%'
例如,这可能会给我 20 个结果。所以我再次循环并说
SELECT * from countries WHERE code LIKE '44%'
这可能给我说一个结果,现在我可以确定是英国了。然而,一些代码如阿尔巴尼亚是三位数,需要更多的循环和数据库调用。这看起来很简陋且效率低下,但我想不出另一种方法来实现这一目标。我意识到对数据库的三个调用可能看起来并不多,但如果您有 1000 个调用要处理,它们很快就会加起来。
看下面的问题:
What regular expression will match valid international phone numbers?
似乎有一些关于根据国家代码验证数字的重要信息,但关于根据数字确定国家代码的信息却不多。任何关于更清洁方法的意见或建议将不胜感激。
为清楚起见,显示了 phone 中的空格
假设 phone 永远是这样的:
$phone = "355 788415235"; // Albania
$parts = explode(" ", $phone);
$code = $parts[0]; // First part separated by space, 355.
然后直接按那个查询。不需要正则表达式。
如果不是这种情况,请考虑在输入级别将国家/地区代码与数字分开。
在您的系统上,每个 phone 号码在国家代码后都有白色 space,因此您可以使用它来确定国家/地区。
创建一个包含所有国家/地区代码的 table。喜欢
编号 |国家 |代码
1 |火鸡 | 90
2 |西班牙 | 34
(有一个table给你:http://erikastokes.com/mysql-help/country.sql.txt)
比爆炸你的 phone 号码。分隔符为白色 space " ".
$phoneNumber = "355 788415235";
$countryCode = explode(" ",$phoneNumber); // it divides phone number to two parts.
$countryCode = $countryCode[0]; // it returns 355. We write index 0 because country code is first part.
//Now you can call your country by country code.
$sqlQuery ="SELECT country FROM yourTableName WHERE code = '$countryCode' ";
...
//it will works like a charm. Because i currently using this.
国家代码中没有重叠歧义。含义:国家代码 11 是非法的,因为 1 分配给了北美。同理,20是埃及,没有其他20开头的国家代码。而21开头的国家代码都是3位。
由于没有重叠歧义,您可以在一个查询中直接搜索 phone 号码 12125551212 的国家代码,如下所示:
select country
, code
from countrycodes
where code in ('121', '12', '1')
同样,没有国家代码 121 或 12,因此唯一匹配的标准是 1。
存在一个库,可以解析一串数字并将其重新格式化为国际标准(数字如 4402081231234 到“+44 20 8123 1234”)。它还将 return Phone 号码区域,'GB' 或 'US' 来自号码,如果号码中嵌入了国家/地区代码。
https://github.com/googlei18n/libphonenumber 原库在Java,但在Javascript、Python、Ruby和[=18=中也有版本],等等。