c# - 验证英国电话号码

标签 c# regex language-agnostic

<分区>

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

最佳答案

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

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

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

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

  • 他们从零开始。

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

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

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

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

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

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

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

  • 0809070开头的号码是特价号码,一般不会作为私有(private)号码给出,所以验证私有(private)号码可以排除。

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

关于c# - 验证英国电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32401/

相关文章:

c# - 如何加入数据并与另一个访问数据库进行比较

javascript - 如何在不刷新网页的情况下调用 Controller 的方法?

c# - Entity Framework Core - 不使用主键的两个表之间的关系

计算二进制数字范围内 1 的个数的算法

language-agnostic - 为什么写一个关闭的 TCP 套接字比读一个更糟糕?

c# - 有时 List<object> 上的 Model Binder null

javascript - 至少一个数字的正则表达式

正则表达式有效的 Twitter 提及

javascript - 是否可以让\w 正则表达式模式也允许 é 等字符?如果没有,还有哪些替代方案?

language-agnostic - 为什么不是每种类型的对象都可序列化?