2008-08-28 265 views

回答

28

已接受答案中的正则表达式与所有有效的英国数字都不匹配,因为它的限制太多(同时打开了其他数字范围,例如0203,它被视为无效)。

英国电话号码遵循相当简单的规则:

  • 它们可以是10个或11位数字(一些特殊号码的例外,但你不可能需要验证的)

  • 它们由一个区号后跟一个本地号码组成。地区代码的长度在三到五位数字之间变化,数字的本地部分占用10或11位数字的剩余长度。出于所有实际目的,没有人会引用他们的本地部分号码,因此您可以忽略现在的区别,除了它如何影响格式。

  • 它们从零开始。

  • 第二个数字可以是任何东西。目前没有有效的数字从0406开始,但是没有什么能阻止这些范围在将来被使用。 (03最近已投入使用)

  • 它们可以用一组括号和空格(一个或多个,位置不同)格式化,但这些都是完全可选的。

因此,英国的电话号码,一个基本的工作表现看起来是这样的:

/^\(?0(*\d\)?){9,10}$/ 

这将检查10个或11位数字,从零,与任何与格式空间数字以及区域代码的一组括号。

(是的,这将允许不匹配的括号,因为我没有检查只有一个右括号,强制执行这将使表达式变得更加复杂,而且我没有时间去处理这个权利现在,反而觉得免费的,如果你想添加这个)

顺便说一句,如果你想要做额外的过滤,你可能想也应注意以下原则:

  • 号开始0809070是特殊价格数字,通常不会以私人数字的形式给出,所以如果验证私人号码可以被排除。

  • 07号码是移动号码(除了070;请参阅上面的内容),因此如果您正在验证固定电话,可以排除此号码。

+0

到这个答案的顶部! – 2011-12-12 13:18:48