3

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

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

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

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

4

7 回答 7

9

看看 Number::Phone::NANP ( lNumber::Phone::NANP )。我想您将为未覆盖的国家/地区添加新的子类。

于 2009-03-16T13:31:45.627 回答
8

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

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

于 2009-03-16T14:10:55.550 回答
3

验证的目的是通过捕获强制他们在输入期间使用特定格式的输入错误来帮助用户。

有一点验证不再对用户有帮助。通常,这也是验证规则的异常变得太多而程序员无法处理的地方,因为他进入了收益递减的领域。

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

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

于 2009-03-17T08:32:49.193 回答
1

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

我建议你检查一下:

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

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

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

于 2009-03-16T13:29:25.353 回答
0

To expand on Chas. and Domchi's points: There are two reasons to validate a phone number:

  1. To help the user to correctly enter his/her number (often when the user WANTS you to have their number)
  2. To prevent the user from proceeding without entering a valid number (often when the user would rather not give it to you)

If your case is case #1 simple validation is all you need since you don't want to prevent a fringe case correct entry and frustrate your user, you simply want to help them from incorrectly entering their number.

If your case is case #2, no amount of validation will prevent a user from entering a valid number that isn't theirs. To really do this you would need to do an automated call-back with a validation code, in which case you are now more in case #1 since they will need to provide a correct number to get the validation code. This will be MUCH more work though.

In the end, you really only need to cover case #1, help the user to enter a correct number. Don't frustrate away a potential user, just due to phone number validation.

于 2011-02-21T21:11:45.097 回答
0

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

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

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

请留意:http ://code.google.com/p/libphonenumber/以了解其他任何宣布的内容。

于 2011-02-21T19:30:35.693 回答
-2

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

但无论如何,每个国家都需要一个,显然这不能包括世界上任何国家,但你可以在这里找到电话模式

于 2009-03-16T13:31:13.290 回答