php - 从电话号码确定国家

标签 php regex preg-match

我在 SO 上看到了一些与我的要求类似的问题,但似乎没有什么符合要求。

我处在需要处理通话记录并使用电话号码确定国家的位置。调用的号码可以是任何国家,例如:

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?

似乎有一些关于根据国家/地区代码验证数字的重要信息,但没有太多关于根据数字确定国家/地区代码的信息。任何关于清洁方法的意见或建议将不胜感激。


为清楚起见,显示了手机中的空格

最佳答案

存在一个库,可以解析一串数字并将其重新格式化为国际标准(数字如 4402081231234 到“+44 20 8123 1234”)。如果号码中嵌入了国家/地区代码,它还会从号码中返回电话号码区域、“GB”或“US”。

https://github.com/googlei18n/libphonenumber原始库使用 Java,但也有 Javascript、Python、Ruby 和 PHP 等版本。

关于php - 从电话号码确定国家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27938803/

相关文章:

php - Zend : How to log PHP errors

Java String.matches ("regex")

php - 正则表达式提取标签之间的文本,但不提取标签

php - 使用 php 从以开头和结尾的字符串中获取所有匹配项

php - 允许空格、unicode 字母、数字、下划线、破折号和逗号吗?

php - 将 PHP 变量从 while 循环传递到 javascript 函数

PHP 从 API 响应中获取 json 汇率值

php - 如何在php phpspreadsheet中使用excel sum公式?

regex - 如何在vim中折叠所有出现的正则表达式?

regex - 正则表达式从命令历史记录中获取已执行的脚本名称