验证英国电话号码

时间:2008-08-28 14:26:43

标签: c# regex language-agnostic

如何使用正则表达式在C#中验证英国电话号码?

1 个答案:

答案 0 :(得分:29)

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

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

  • 它们可以是10或11位长(除了一些特殊数字,但您不太可能需要验证这些数字)

  • 它们由区号和后面的本地号码组成。区号的长度在3到5位之间变化,并且号码的本地部分占用10或11位的剩余长度。出于所有实际目的,没有人只引用其编号的本地部分,因此您可以忽略现在的区别,除了它如何影响格式化。

  • 他们从零开始。

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

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

因此,英国电话号码的基本工作表达式可能如下所示:

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

这将检查10或11位数字,从零开始,在任何数字之间有格式空格,并可选择区域代码的一组括号。

(是的,这会允许不匹配的括号,因为我没有检查只有一个结束括号。强制执行此操作会使表达式更加复杂,我现在没有时间,但如果你愿意,可以随意添加)

顺便说一下,如果您想要进行额外的过滤,您可能还需要注意以下规则:

  • 0809070开头的数字是特殊价格编号,通常不会作为私人号码提供,因此如果验证私人号码,则可以将其排除。

  • 07号码是移动的(070除外;见上文)如果你专门验证固定电话,可以排除这些号码。