Viv*_*art 18 java formatting localization
如何将手机号码分为国家代码,区号和本地号码?拆分后例如+919567123456
国家代码= 91
区号= 9567
当地号码= 123456
Kev*_*ion 50
不要维护自己的所有这些数据表!使用"Java International Phone Number Utilities library v3.0",https://github.com/googlei18n/libphonenumber.这就是Google使用的,Google会为您维护它!
正如很多人所提到的,您不能通过简单的字符串匹配来做到这一点。国家或地区代码的长度都不固定。
过去完成此操作后,我们维护了一个结构类似于以下的表:-
+------------+---------+--------+-------------+ |国家代码|地区代码|国家|地区| +------------+---------+--------+-------------+ |44 |1634 |英国 |梅德韦 | |44 |20 |英国 |伦敦 | |964 |23 |伊拉克|瓦西特(Al Kut)| |964 |2412 |伊拉克|虚幻| +------------+---------+--------+-------------+
然后,我们计算了area_code和country_code的最大长度,并通过从最大长度开始并一直向下进行子串来检查字符串,直到找到匹配项。
所以给定号码 441634666788
我们将从子字符串 [1,7] 开始(7 是最长的国家/地区代码组合的长度),没有找到匹配项,然后转到 [1,6] 并找到 UK/Medway 的匹配项。
效率不是很高,但确实有效。
编辑
您也可以尝试类似的方法,但您需要使用完整的数据集对其进行测试,甚至可能将其分解为单独的国家和地区代码选择,因为它对于您选择的数据库可能性能不佳。
DECLARE @area_codes TABLE
(
country_code VARCHAR(10),
area_code VARCHAR(10),
country VARCHAR(20),
area VARCHAR(20),
match_string VARCHAR(MAX),
match_length INTEGER
)
INSERT INTO @area_codes VALUES ('44','1382','UK','Dundee', '441382%', 6)
INSERT INTO @area_codes VALUES ('44','1386','UK','Evesham', '441386%', 6)
INSERT INTO @area_codes VALUES ('44', '1', 'UK', 'Geographic numbers', '441%', 3)
DECLARE @number VARCHAR(MAX)
SET @number = '441386111111'
SELECT TOP 1 *
FROM @area_codes
WHERE @number LIKE match_string
ORDER BY match_length DESC
Run Code Online (Sandbox Code Playgroud)
您将通过触发器维护 match_string 和 match_length 字段,注意处理空区号并在 match_string 列上索引表。
| 归档时间: |
|
| 查看次数: |
50356 次 |
| 最近记录: |