一个电话号码应允许使用哪些特殊字符?


20

因此,我正在设计一个供全球用户使用的网页,其中包括来自加拿大,美国,印度,英国等地的用户。我需要对此电话号码字段进行验证,但是我不确定执行此操作的最佳方法。

我能想到的一些有效格式是:

  1. 1800123456(印度)
  2. 美国电话号码中使用“-”

我对应该允许用户输入哪些特殊字符感到困惑(例如- / ())。过去其他人如何解决这个问题?


1
用字母表示的电话号码怎么样,例如0800DIALTHIS?
mouviciel

3
您想防止什么?用户撒谎?用户不想让您知道他们的电话号码吗?用户懒得输入什么?用户正在打错字?
Benjol 2011年

@ mouviviel:是的,我也需要考虑一下我一次参加一个鉴定方案,所以我会考虑一下。
游侠

@Benjol:此应用程序是商业应用程序,因此我们不能冒险给我们的客户提供服务,我知道用户会输入正确的号码,但是如果他/她不输入该号码,该怎么办。评估非常重要,因为它们不仅可以保存输入错误,而且可以节省应用程序。我不希望我的数据库充满无用的垃圾。
游侠

5
那么您正在做什么以验证其电子邮件地址?您会发现几乎所有网站都进行了“现实生活”验证(即向您发送邮件)。我认为,如果电话号码那么重要,则需要做一些等效的事情。
Benjol 2011年

Answers:


21

仅仅因为您可以约束某些东西(这是您作为程序员为编写代码所付出的报酬),但这并不意味着您实际上应该这样做。

验证数字有什么意义?为什么有用?如果用户输入“ 0800DIALTHIS”或“私は电话番号を持っていない”或“(499)123-45-67добавочный4425”,它会失败吗?它肯定会(您说“全球”。不是吗?),而用户只是想向您传达有关如何通过电话与他们联系的重要信息。

此外,它们存储数据的方式应受其使用方式的控制。您将如何使用这些数字?它们会被用来自动发送SMS垃圾邮件吗?还是由管理员手动拨打?如果是后者,则可以允许任何其他字符,因为人脑将能够以他们认为最合适的方式对其进行解析;在这种情况下,您实际上并不需要任何验证,而这只会惹恼人类用户。


7
为“用户只想向您传达重要信息” +1。我经常看到不必要的验证,这些验证只是在没有任何实际技术(或组织)要求的情况下惹恼了用户。
波斯人2011年

6
+1-电话号码验证(尤其是广义上的定义)通常是毫无意义的,不是面向未来的(例如,KL5-6743曾经是有效的电话号码),只会惹恼具有特殊情况的用户。使您的电话号码成为一个大文本字段,并让自动拨号程序(如果在这种情况下有自动拨号程序)解析其功能。可以向能够适当处理情况的人员提出例外。
EZ哈特

8
+1,最重要的是仅仅因为电话号码有效,并不意味着它存在,即使它存在,也并不意味着它属于所讨论的人……
Benjol 2011年

哦,是的,我会找出主要用户所在的国家/地区,然后编写一些验证代码。谢谢大家,我感谢您的努力。
游侠

4
@Ranger答案正好相反。
塞巴斯蒂安·雷德尔

7

由于不同的国家/地区采用不同的格式,因此很难知道数字是否有效。例如,在法国,06 12 34 56 78是有效的电话号码,而00 12 34 56 78不是有效的电话号码,因为该号码只能以01到09、06和07为手机开头。

此外,即使在同一国家/地区,电话号码也可以用多种格式书写。我见过:

  • 06 12 34 56 78
  • 0612345678
  • 06.12.34.56.78
  • 06-12-34-56-78
  • +33612345678
  • +33(0)6 12 34 56 78

最后两个是国际形式。

一般来说:

  1. 允许使用方括号,+仅作为前导符号的符号,破折号,点,逗号和空格。
  2. 如果可能的话,请只记住规范化的形式(即+33(0)612345678)。
  3. 如果不可能,请至少删除分隔符(如空格)。

不建议对每个国家/地区进行过于深入的验证。不仅存在大量规则,而且规则也会发生变化。例如,在法国,几年前没有电话号码以07或09开头。随着手机数量的增加,出现了07。而VoIP服务出​​现了09。

您也可以考虑特殊号码。例如,3635在法国是一个有效数字,即使它仅包含四个数字并且以非零开头。


1
这将有助于显示示例中括号的用法。国际号码通常使用它们将区号的前导零括起来,以表示您从国外拨打电话时不拨打该号码。例如+31 (0)30 1234567,其中31是荷兰,030是区号,而1234567是订户。
Marjan Venema

2
不要忘记扩展代码的可选字段(可能需要使用井号或星号键)。
rwong 2011年

@MarjanVenema,我没有做很多国际拨号,但是标准的是添加零,并添加方括号(0)告诉您不要拨号?完全省去0会更简单吗?
CaffGeek

@乍得:不。它告诉国际用户他们需要省略它,并告诉本国用户他们需要使用它。并非所有国家/地区都以零开头的区号。这样可以确保当有人看到号码时,他们知道在国内和何时出国时该怎么办。毕竟,并不是每个打电话给全国的人都必须是居民...
Marjan Venema

@MarjanVenema,哦,我知道,没有意识到本国用户需要它,今天学到了一些新东西。
CaffGeek

3

不要限制字符;拿走他给你的一切。但是,当您拨号时,请仅输入数字。即使那样也可能会出错。一年之前,我在泰国,我才知道123-4567-9并不是一个扩展名,而是一个范围从1234567到1234569的号码。当我拨打“ 12345679”时,它可以工作,因为电话公司忽略了多余的数字。随便什么,只拨数字。

我喜欢我的新手机在电话号码中留有空格。我可以像这样输入“ 123 456 7890”,而不是全部混在一起。


2
+100。没有什么比计算机说“请从数字中删除-”更糟糕的了,好像计算机不知道如何自行执行此操作。信用卡号相同,FWIW。
布莱恩·奥克利

0

括号,破折号和空格。

用户输入了包含这些符号的电话号码后,您可以根据国家/地区特定的规则(需要收集每个国家/地区的这些规则)对它们进行验证,然后可以在输入非数字时将其删除在您的软件内部进行处理。

这是因为IDD(国际直接拨号)使得不可能要求在拨号中实际使用任何“特殊字符”,但在打数字时会暂停。

(我一点都不了解;如果我错了,请纠正我。)


3
您忘记了国际访问的\ +标记
Marjan Venema,

2
也允许使用字母x-至少在美国,通常以x开头扩展名(例如:555-1212 x123)。
布莱恩·奥克利

0

唯一需要验证的是数字位数-它与您需要呼叫的数字匹配吗?

用户可以/不应输入访问代码(例如,美国为+1)。我将告诉您原因-如果输入的是美国人,而且他们也不那么精明,他们可能会想输入001而不是1。原因是00是您从美国境内访问国际号码的方式。他们不知道那和+1之间有什么区别。如果要在区号之间(有时在同一区号中)拨打固定电话,则还要在该号码前输入1。就像日本一样。

以日本为例。访问省级固定电话,其前面带有0。但是,如果您是从日本境外拨打电话,则不需要该0。

中国的手机号码是10位数字,而香港的手机号码是8位数字。如果您的表格捕获了国家/地区,则甚至不需要在该号码的开头要求输入国家/地区代码-只需在旁边的只读文本中自动显示该国家/地区代码即可他们需要输入的号码。

清单继续。

只需验证数字位数(确保不接受任何字母),并使最终用户轻松输入正确的数字位数即可。也就是说,他们不必输入国家/地区代码,并且如果您的表格超级聪明,那么如果他们是座机号码,他们甚至不需要输入区号。或者,如果他们开始输入访问码之类的东西,例如日语数字前的0,则让他们知道他们不需要输入。

除数字外,其他所有字符都应作为讨论点-他们没有机会输入数字。


1
我不同意确保不接受任何信件-继续接受,然后忽略它们。人们自然会用前导“ x”写扩展名(例如:555-1212 x123)。为什么不允许呢?人们可以很好地解析它,并且如果计算机需要使用它,它可以轻松地去除非数字。
布莱恩·奥克利

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.