我想找到一个工具/图书馆,可以通过网站输入用户输入的免费格式电话号码,并将其解析为适合从特定国家/地区拨打电话的号码.
这并不像起初听起来那么简单.该网站允许世界各地的人以他们选择的任何方式输入他们的号码,因此许多人输入国家号码(另一个领域也提供一个国家).有些人以"正确"格式(使用"+")输入国际号码,有些人使用其国家/地区的国际前缀稍微不正确地输入.
我想告诉图书馆/工具我拨打的国家,以及免费格式的电话号码和可选的国家(如果没有输入,这将有助于生成国际代码),并使用它已知的模式可以最好地猜测在我的呼叫国家中可以使用的数字
因此,例如,从美国拨打英国号码时:
+44 (0) 1225-344567 => 011441225344567
Run Code Online (Sandbox Code Playgroud)
或者从英国致电美国号码时:
(613) 4562342 => 0016134562342
Run Code Online (Sandbox Code Playgroud)
任何人都知道任何(理想情况下是.NET Framework友好的)解决方案,这将避免我无疑重新发明轮子
马克,我已经实现了这一点.我在无线运营商工作,并有国际短信发送应用程序.我不知道有任何第三方库实现这些规则.如上所述,人们不能只处理随机输入,因为不同国家的电话号码格式不同.德国等一些国家/地区的区号和电话号码可变.如果他们没有把国家代码放在那里你就会沉没.但是,在我的情况下,我可以假设,如果它缺少国家代码,那么它是美国的电话号码.我的过滤器的结果已被证明对用户和我的输入非常准确.
人们可以做出一些假设,通过了解目标受众,记录输入和分析,可以得到拨入的内容.我的第一个实现是用于"白标"网络应用程序,用于世界各地的人们进行测试.我很快发现大多数外国人都在一起行动,习惯了准标准+格式.通常美国人输入最困惑的电话号码.欧洲人非常习惯国际拨号.
第一条规则是删除除数字和前导'+'之外的所有内容.
如果结果数字少于8位,则为垃圾,提供用户错误.
如果结果数字以"+"开头,则假设它是标准格式,接下来的2-6位代表"国家代码".找出国家/地区代码,然后根据该国家/地区的规则处理剩余的数字.
如果数字从0开始,假设某人输入了国际访问前缀,并剥离前导0和1,则:如果剩余数字是10位数,则假设它是由美国人输入的美国号码,并相应处理.如果剩余数字不是10位数,但至少为8位,则假设前2-6位数字是国家/地区代码,请查找国家/地区代码,然后根据该国家/地区的规则进行处理.
如果数字以1开头,并且总数为11位,则假设它是美国(或加勒比海岛屿)编号,并相应处理.
如果数字以1开头并且不是11位数,则去掉前导1,查看是否还剩下至少8位数,并假设剩余的前2到6位数是国家代码和按国家/地区规则处理的数字.
最后,如果数字不带+,0或1,并且至少为8位数,则假设它是标准符号而没有+,即国家代码优先,使用前2到6位数字作为国家代码并根据该国家的规则进行处理.
所有这一切的诀窍是绘制所有世界国家代码的映射,以及每个国家的编号方案信息.我有那张地图,以及许多国家的规则.如果你想要这些信息,我很乐意与大家分享,以及一些确定哪个国家的C#代码.给我发短信.
这方面的一个巨大帮助是将软件猜测的国家/地区的名称发回给用户.如果他们试图输入德国电话号码,他们会很快理解你的软件问他们是否正试图拨打关岛!
是的:Google 用于解析、格式化、存储和验证国际电话号码的通用 Java、C++ 和 Javascript 库现已移植到 C#:
https://github.com/erezak/libphonenumber-csharp
祝你好运!