我正在使用Perl进行Web开发。我需要为所有国家/地区进行电话号码验证。是否有开源Perl模块可以执行以下操作?
例如:country = Malaysia,如果用户输入的电话号码= +60127008007,验证后返回,这是马来西亚的有效手机号码,其中: 在马来西亚当地,我们直接致电:0127008007。 “+6”是国际代码。
如果用户输入的电话号码= +600127008007,则返回无效的电话号码。因为在马来西亚本地,没有这样的号码:00127008007。
任何免费模块都可以在CPAN中执行此操作吗?
答案 0 :(得分:9)
看看Number :: Phone :: NANP(lNumber::Phone::NANP)。 我想你会为未覆盖的国家添加新的子类。
答案 1 :(得分:8)
验证假定您比输入数据的人更了解,但在这种情况下,您不知道。假设我是一名在加拿大签订长期合同的美国人。我保留了手机,因为我工作的公司正在支付漫游费。当我访问您的网站并输入我的美国手机号码和加拿大地址时,您的验证脚本声称它不是无效的。这会导致客户混淆和愤怒。
如果有效的电话号码(或电子邮件)是您的业务的绝对要求,您必须通过电话号码(或电子邮件地址)致电(或发送电子邮件)该人,并让他们输入您提供给他们的代码。 hardware/software旨在自动呼叫号码并向收件人提供消息。您可以使用文本到语音软件(如Festival)通过手机播放特殊密钥,然后让他们将其输入您的网站以确认他们可以访问该手机。即便如此,这也不是绝对可靠的,因为我可以买一个丢弃的手机或创建丢弃的电子邮件地址。
答案 2 :(得分:3)
验证的目的是帮助用户捕获输入错误,迫使他们在输入过程中使用特定的格式。
有一点是验证不再对用户有帮助。通常情况下,这也是验证规则的例外变得对程序员来说太过分的一点,因为他进入了收益递减的土地。
为什么需要经过验证的电话号码?您确定用户不会尝试在同一个字段中输入两个号码并放弃挫折吗?您确定用户不会输入“555-5555(询问史蒂夫)”或“555-5555(扩展123)”或其他一些完全有效的输入吗?您确定自己足够聪明,可以预测每个输入用户可能需要输入该字段吗?
不要试图超越您的用户。帮助他:)
答案 3 :(得分:1)
实际上不可能保留每个国家/地区的有效区号和号码长度的最新列表。
我建议你检查一下:
所以你有6到21位数,特别感谢奥地利。 =)
话虽如此,除非您拨打电话,否则您永远无法确定电话号码是否有效。你将让人们围绕验证工作(例如,输入一个不属于他们的有效公共号码),所以你应该问自己:“这真的有必要吗?” / p>
答案 4 :(得分:0)
有人打算将libphonenumber移植到Perl,但它还没有发生。
已经有一个完整的JavaScript端口。
到目前为止,Ruby,PHP和Python都有不完整的端口。预计C ++端口将在几个月内完成。
答案 5 :(得分:0)
扩展Chas。和Domchi的观点:验证电话号码有两个原因:
如果您的案例是第1号案例,那么您需要简单验证,因为您不想阻止条纹案例正确输入并使用户感到沮丧,您只需要帮助他们错误地输入他们的号码。
如果您的案例是案例#2,则任何数量的验证都不会阻止用户输入不属于他们的有效号码。要真正做到这一点,您需要使用验证代码进行自动回调,在这种情况下,您现在更多地遇到#1,因为他们需要提供正确的数字来获取验证代码。这将是更多的工作。
最后,您真的只需要覆盖案例#1,帮助用户输入正确的号码。不要因为电话号码验证而挫败潜在用户。
答案 6 :(得分:-2)
我不知道Perl,但这是使用Regexp的完美案例。
但无论如何,每个国家/地区都需要一个,显然这不包括世界上任何国家/地区,但您可以找到phone patterns here。