是否有Perl的全国电话号码验证器?

时间:2009-03-16 13:20:43

标签: perl validation phone-number

我正在使用Perl进行Web开发。我需要为所有国家/地区进行电话号码验证。是否有开源Perl模块可以执行以下操作?

例如:country = Malaysia,如果用户输入的电话号码= +60127008007,验证后返回,这是马来西亚的有效手机号码,其中: 在马来西亚当地,我们直接致电:0127008007。 “+6”是国际代码。

如果用户输入的电话号码= +600127008007,则返回无效的电话号码。因为在马来西亚本地,没有这样的号码:00127008007。

任何免费模块都可以在CPAN中执行此操作吗?

7 个答案:

答案 0 :(得分:9)

看看Number :: Phone :: NANP(lNumber::Phone::NANP)。 我想你会为未覆盖的国家添加新的子类。

答案 1 :(得分:8)

验证假定您比输入数据的人更了解,但在这种情况下,您不知道。假设我是一名在加拿大签订长期合同的美国人。我保留了手机,因为我工作的公司正在支付漫游费。当我访问您的网站并输入我的美国手机号码和加拿大地址时,您的验证脚本声称它不是无效的。这会导致客户混淆和愤怒。

如果有效的电话号码(或电子邮件)是您的业务的绝对要求,您必须通过电话号码(或电子邮件地址)致电(或发送电子邮件)该人,并让他们输入您提供给他们的代码。 hardware/software旨在自动呼叫号码并向收件人提供消息。您可以使用文本到语音软件(如Festival)通过手机播放特殊密钥,然后让他们将其输入您的网站以确认他们可以访问该手机。即便如此,这也不是绝对可靠的,因为我可以买一个丢弃的手机或创建丢弃的电子邮件地址。

答案 2 :(得分:3)

验证的目的是帮助用户捕获输入错误,迫使他们在输入过程中使用特定的格式。

有一点是验证不再对用户有帮助。通常情况下,这也是验证规则的例外变得对程序员来说太过分的一点,因为他进入了收益递减的土地。

为什么需要经过验证的电话号码?您确定用户不会尝试在同一个字段中输入两个号码并放弃挫折吗?您确定用户不会输入“555-5555(询问史蒂夫)”或“555-5555(扩展123)”或其他一些完全有效的输入吗?您确定自己足够聪明,可以预测每个输入用户可能需要输入该字段吗?

不要试图超越您的用户。帮助他:)

答案 3 :(得分:1)

实际上不可能保留每个国家/地区的有效区号和号码长度的最新列表。

我建议你检查一下:

  1. 国际通话代码(1至3位数字)
  2. 区号(通常为3位数,但范围为1至5位)
  3. 电话号码(通常为6到8位数,但范围为4到13位)
  4. 所以你有6到21位数,特别感谢奥地利。 =)

    话虽如此,除非您拨打电话,否则您永远无法确定电话号码是否有效。你让人们围绕验证工作(例如,输入一个不属于他们的有效公共号码),所以你应该问自己:“这真的有必要吗?” / p>

答案 4 :(得分:0)

有人打算将libphonenumber移植到Perl,但它还没有发生。

已经有一个完整的JavaScript端口。

到目前为止,Ruby,PHP和Python都有不完整的端口。预计C ++端口将在几个月内完成。

关注其他任何人的http://code.google.com/p/libphonenumber/

答案 5 :(得分:0)

扩展Chas。和Domchi的观点:验证电话号码有两个原因:

  1. 帮助用户正确输入他/她的号码(通常是当用户想要你的号码时)
  2. 防止用户在未输入有效号码的情况下继续进行(通常是在用户不愿意将其提供给您时)
  3. 如果您的案例是第1号案例,那么您需要简单验证,因为您不想阻止条纹案例正确输入并使用户感到沮丧,您只需要帮助他们错误地输入他们的号码。

    如果您的案例是案例#2,则任何数量的验证都不会阻止用户输入不属于他们的有效号码。要真正做到这一点,您需要使用验证代码进行自动回调,在这种情况下,您现在更多地遇到#1,因为他们需要提供正确的数字来获取验证代码。这将是更多的工作。

    最后,您真的只需要覆盖案例#1,帮助用户输入正确的号码。不要因为电话号码验证而挫败潜在用户。

答案 6 :(得分:-2)

我不知道Perl,但这是使用Regexp的完美案例。

但无论如何,每个国家/地区都需要一个,显然这不包括世界上任何国家/地区,但您可以找到phone patterns here

相关问题