【问题标题】:Is there an all-countries phone number validator for Perl?Perl 是否有适用于所有国家/地区的电话号码验证器?
【发布时间】:2009-03-16 13:20:43
【问题描述】:

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

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

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

任何免费模块都可以做到这一点,在 CPAN 或其他方式中?

【问题讨论】:

标签: perl validation phone-number


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      验证有时对用户没有帮助。通常,这也是验证规则的异常对于程序员来说变得难以处理的点,因为他进入了收益递减的领域。

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

      不要试图智取你的用户。帮助他。 :)

      【讨论】:

        【解决方案4】:

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

        我建议你检查一下:

        1. 国际电话代码(1 到 3 位)
        2. 区号(通常为 3 位,但范围为 1 到 5 位)
        3. 电话号码(通常为 6 到 8 位,但范围为 4 到 13 位)

        所以你有 6 到 21 位数字,特别感谢奥地利。 =)

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

        【讨论】:

        • 投票支持;鉴于帖子是正确的,-1 似乎不公平。什么是“有效”电话号码取决于国家/地区,尤其是在发展中国家,电话号码的格式变化相对频繁。
        【解决方案5】:

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

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

        到目前为止,Ruby、PHP 和 Python 的端口不完整。预计几个月内就会有 C++ 端口。

        请留意:http://code.google.com/p/libphonenumber/ 其他任何宣布的消息。

        【讨论】:

          【解决方案6】:

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

          1. 帮助用户正确输入他/她的号码(通常当用户希望您拥有他们的号码时)
          2. 防止用户在未输入有效数字的情况下继续操作(通常是在用户不愿将其提供给您的情况下)

          如果您的案例是案例 #1,您只需要简单的验证,因为您不想阻止边缘案例正确输入并让您的用户感到沮丧,您只是想帮助他们避免错误地输入他们的号码。

          如果您的情况是第 2 种情况,那么任何验证都不会阻止用户输入不属于他们的有效号码。要真正做到这一点,您需要使用验证码进行自动回叫,在这种情况下,您现在更多的是在第 1 种情况下,因为他们需要提供正确的号码才能获得验证码。不过,这将是更多的工作。

          最后,你真的只需要覆盖案例#1,帮助用户输入正确的数字。不要仅仅因为电话号码验证而让潜在用户失望。

          【讨论】:

            【解决方案7】:

            我不了解 Perl,但这似乎是使用 Regexp 的完美案例。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-03-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-09-20
              • 2021-10-03
              • 2017-03-30
              • 1970-01-01
              相关资源
              最近更新 更多