英国电话号码的正则表达式

时间:2009-09-29 11:36:01

标签: vb.net regex

我想要VB.NET正则表达式以下格式

7966-591739

我的意思是用户必须首先输入 4 数字字符,然后“ - ”然后 6数字之后的字符数字和字符的可选。在我的情况下,用户也可以输入

7966-591739 分机 562

7966-591739 x 434

请建议!

9 个答案:

答案 0 :(得分:8)

没有标准的英国电话格式

允许用户输入他们想要的内容并删除非数字字符

示例电话号码包括(全部来自地址簿)

020 7xxx xxxx
017373 xxxxx
0796 xxxx xxx
07780 xxx xxx

你也使用括号或 -

还有国际形式+44并且下降0(通常错误地完成为+44(0)20 7xxx xxxx)

当我无法将我的电话号码输入表格时,这真让我烦恼 - 更糟糕的是从某个地方粘贴它

答案 1 :(得分:2)

我建议不要 - 某些英国号码在 -

之前有五位数字

答案 2 :(得分:2)

  

我正在寻找一个例程,将一串数字格式化为英国电话号码。

您可以下载Ofcom数据库,其中列出了每个号码范围的格式,包括全国拨号号码,并查找您需要格式化的每个号码。数据库列出了每个范围的SABCDE数字和格式:0 + 10,2 + 8,3 + 7,4 + 6,4 + 5,5 + 5或5 + 4。

数据库中存在少量错误(尤其是01697和0169 77代码),但在超过25万个条目中,错误数量少于10个。

有四个文件涵盖01和02号码,以及各种非地理号码范围的单独文件。

0 + 10个号码是“全国拨号”,并且在区号部分周围没有括号。区号为所有02号码的02x,所有011x和01x1号码的01xx,以及大多数其他01号码的01xxx(非常小的数字 - 大约十几个 - 将是01xx xx)。

括号围绕所有其他01和02号码上的区号(即,使用01和02号码上的括号,其中本地号码部分以0或1开头)。括号表示通过省略括号括起来的数字,可以在同一区域内进行本地拨号。

2 + 8命名法显示区号和本地号码长度,条目2075:2 + 8表示号码格式为(020)75xx xxxx。请记住,在2 + 8判断中,前导零不会被“计算”。

  

英国电话号码的长度从8位到12位不等

没有。自2000年以来,大多数都在'0'中继代码之后有10位数字。少数仍然在'0'中继代码后有9位数字。

还需要考虑一些特殊数字,如0800 1111和0845 4647。

  

“区域”代码可以在2到4位数之间变化。

区号可以在2到5位之间变化(不计算前导零)。需要说明的是,'020'被归类为2位区号,因为前导0实际上是中继码。还有011x和01x1区号,大多数其他区号都有01xxx区号。后者可能具有仅5位数的本地数字,而不是更广泛发现的6位数本地数字。一个非常小的数字有一个01xx xx区号,它们有5或4位本地号码。

  

此外,对于确切放置空间的位置没有标准。

所有01和02号码的区号部分和本地号码部分之间总是有空格。

传统的(01xx xx)区域代码在区域代码中有一个空格,如图所示。这表示此系统仍在使用的旧本地交换分组。其他(较短的)区号不分开。

7位或8位数的本地数字在结尾的第四位数之前有一个分割。 4位,5位或6位的本地号码不会分开。这同样适用于地理和非地理数字。

对于大多数03,08和09号码,该号码写为0xxx xxx xxxx。

某些0800和所有0500号码都写成0xxx xxxxxx。

对于055,056和070数字,该数字写为0xx xxxx xxxx。

对于手机和寻呼机号码,请使用07xxx xxxxxx。

  

除了一些人使用'08000 abc def'而不是'0800 0abc def'

该用法不正确。请注意,一些0800号码在0中继码后有9位数字,而其他号码在0中继码后有10位数字。

所以,0800 xxxxxx和0800 xxx xxxx都是正确的。

0500号码仅使用0500 xxxxxx。

大多数03,08和09编号写为0xxx xxx xxxx。

http://en.wikipedia.org/wiki/Local_conventions_for_writing_telephone_numbers#United_Kingdom

  

英国电话号码的格式为(12345)123456

不正确,而且过于笼统。中继码为“0”,本地号码不以“1”开头。

  

所有地面行号都以01开头

不正确的。自2000年以来,有五个区域有(02x)代码。

  

(012345)333444或012345 333444

这两个例子中的数字太多了。 0主干代码后,英国号码最多有10位数。

  

除非是高级号码或免费电话0800 333444或0849 333444   我一发布就改变了,记得0800.马克的回答并不完全正确,这些数字可以表示为\ d {4,5} \ d {6}

没有。 0800号码可以是\ d {4} \ d {6,7}但是0808和所有其他08xx号码都是\ d {4} \ d {7},所有03和09号码都是。

不要忘记0500号仍然存在并且是\ d {4} \ d {6},因为它们比正常数字短。

答案 3 :(得分:1)

真正验证号码的唯一可靠方法是尝试调用它。

(先检查一下它不是999。)

答案 4 :(得分:1)

你马上就输了。在英国,我们不会写这样的数字,我们有一大堆“有趣”的规则和格式,我们喜欢使用。这里没有标准的方法来表示数字。

我真的不认为RegExp是要走的路,不是没有让它变得愚蠢,即便如此,你也不会覆盖所有东西,所以我觉得需要另一种方法。

一些示例号码(请不要将这些作为现在RegExp爱好者的用例):

大多数土地行号以01开头(其他可用,02)

(01234)333444和01234 333444是常见的

然后有预先编号或免费电话号码:

0800 333444或0808 333 4444

或移动电话(在池塘对你们说话)

07723 123456或07123123456或07723 123 456

即使是空间也是可选的!

然后是国际号码

01235 333222也可以是+44 1235 333222

所以希望你能看到有太多的变化来真实地创建一个RegExp来捕获它们而不会让它变得愚蠢冗长且不可读。

更好的选择是剥去任何有趣的角色,并检查最小长度,以确保它超过10(或接近它,你的选择),这就是你能做的最好的,它的好看和简单,如果它错了, 这是不对的。无论如何,人们仍然可以输入错误的电话号码,只有这样的情况下,你才能做到这么多,而且过于严格可能会让你的用户烦恼。如果他们的有效号码不在您严格的RegExp中,那么如果被告知您的家庭电话号码显然“无效”会有多烦人呢?

答案 5 :(得分:1)

  

正如其他几位评论员指出的那样,区号可能是3个,4个或5个数字。

在前导0主干前缀或+44国家/地区代码之后,区号可以是2,3,4或5位长。总数长度(不包括0或+44)可以是10或9位数。

使用2位数的区号,用户号码为8位数。

使用3位数的区号,用户号码为7位数。

使用4位区号,用户号码可以是6或5位长。

使用5位数的区号,用户号码可以是5或4位长。

某些0800和所有0500号码也比正常数字短。

  

我在发布后立即对其进行了更改,记得0800.Mark的回答并不完全正确,这些数字可以表示为\ d {4,5} \ d {6}

@ Stevo3000该模式仍然存在问题。你会得到0800 445566就好了,但是对于更长的数字08001 334455和08009 667788都不行。这些应该是0800 133 4455和0800 966 7788.请注意,0808数字始终格式化为0808 555 7777,因为它们在初始0后总是有10位数。

答案 6 :(得分:0)

试试这个:

'[0-9]{4}\-[0-9]{6}( (ext|x) [0-9]{3})?'

答案 7 :(得分:0)

我相信英国号码通常在你的' - '字符之前有5位数。

我更新了@ NawaMan的答案,让它运行并删除捕获组:

^[0-9]{4,6}\-[0-9]{6}(?:\s(?:ext|x)\s[0-9]{3,4})?$

这里是为了捕捉数字组:

^([0-9]{4,6})\-([0-9]{6})(?:\s(?:ext|x)\s([0-9]{3,4}))?$

以下是表达清理:

^(\d{4,6})\-(\d{6})(?:\s(?:ext|x)\s(\d{3,4}))?$

更新 - 按照OP的要求。

答案 8 :(得分:0)

我过去使用过两个Regex,一个用于固定电话:

^(\+44)?\s?\(?0\)?[12358]\d\s?\d\)?\s?\d\)?(\s?\d){6}$

和一个移动电话:

^(\+44)?\s?\(?0\)?7[5789]\d\s?\d\)?\s?\d\)?(\s?\d){5}$

希望这些能帮助您指明正确的方向。