我想要VB.NET正则表达式以下格式
7966-591739
我的意思是用户必须首先输入 4 数字字符,然后“ - ”然后 6数字之后的字符数字和字符的可选。在我的情况下,用户也可以输入
7966-591739 分机 562
7966-591739 x 434
请建议!
答案 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}$
希望这些能帮助您指明正确的方向。