6

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

4

1 回答 1

30

接受的答案中的正则表达式与所有有效的英国号码都不匹配,因为它过于严格(同时开放了其他号码范围,例如 0203,它认为这是无效的)。

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

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

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

  • 它们从零开始。

  • 第二个数字可以是任何东西。04目前没有以or开头的有效数字06,但没有什么能阻止这些范围在未来的使用。(03最近开始使用)

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

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

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

这将检查 10 位或 11 位数字,从零开始,任何数字之间的格式空格,以及可选的区号括号。

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

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

  • 08以、09和开头的数字070是特殊价格数字,通常不会作为私人数字给出,因此如果验证私人数字,则可以排除。

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

于 2011-10-11T15:04:25.707 回答