关于c#:验证英国的电话号码

关于c#:验证英国的电话号码

Validate a UK phone number

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


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

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

  • 它们的长度可以是10或11位数字(某些特殊数字除外,但您不必验证这些数字)

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

  • 他们从零开始。

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

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

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

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

这将检查从零开始的10或11位数字,其中任意数字之间都有格式间隔,并可选地包含一组用于区号的括号。

(是的,这将允许使用不匹配的括号,因为我没有检查是否只有一个右括号。强制执行此操作会使表达式变得更加复杂,并且我现在没有时间这样做,但是感觉如果需要,可以免费添加)

顺便说一句,如果您要进行其他过滤,则可能还需要注意以下规则:

  • 0809070开头的数字是特殊价格,通常不会作为私有数字给出,因此如果验证私有数字可以将其排除在外。

  • 07号是可移动的(070除外;请参见上文),因此如果您专门验证固定电话,则可以将其排除。


推荐阅读