电话检验正则表达式

lantianyuan 2006-12-11 01:29:20
高分求一特定区域电话正则表达式,格式表述如下:
“国家-区号-电话(,备选电话)(ext分机)”
1、国家、区号、电话、备选电话、分机都只能是数字,且不能以0为开头(如北京区号只能写10而不能是010)。
2、国家的号只能是86、886、852或65。
3、如果有多个电话,备选电话必须要以英文的“,”与前面的电话号码分开。
4、如果有分机,则分机要以ext与前面的电话相连。

PS:格式中的括号表示非必须项,并不是电话号码串中要有的。
...全文
274 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lantianyuan 2006-12-11
  • 打赏
  • 举报
回复
呵呵,搞定结分。
特别说明一下:
j9988(j9988)兄的在C#下没有任何问题。满足要求。但是在Javascript下,总是不行,估计是“\”的转义问题,换了用“\\d”也不管用。
哪位告诉偶一下Javascript下如何取消转义啊?
没办法,参考了“oldmoon(电子商务人,电子商务路)”的,写了个超笨的如下(现在改为),总算解决问题了:
^(86|886|852|65){1}([-]{1}[1-9][0-9]{1,2}){0,1}([-]{1}[1-9][0-9]{6,7}){1}([,]{1}[1-9][0-9]{6,7})*((ext){1}[1-9][0-9]{1,4}){0,1}$
j9988 2006-12-11
  • 打赏
  • 举报
回复
^(86|886|852|65){1}([-]{1}[1-9]{2,3}[-]{1}[1-9]{7,8}){1}([,]{1}[1-9]{7,8})*((ext){1}[1-9]{1,}){0,1}$
------------------------------------------------
^(86|886|852|65)-->这种写法应该是错的, ^(?:86|886|852|65)

{1}<--所有的"{1}"可以不要!

([-]{1}[1-9]{2,3}[-]{1}<------这里面的{1}都是多余的.

[1-9]{7,8} <-----这种写法,电话号码是7到8位,但中间不能出现0,当然也是错的.

j9988 2006-12-11
  • 打赏
  • 举报
回复
^(?:86|886|852|65)-[1-9]\d{1,3}-[1-9]\d{6,7}(?:,[1-9]\d{6,7}|)*(?:ext[1-9]\d{6,7}|)$

这样吧,区号2-4位:[1-9]\d{1,3}

电话7-8位:[1-9]\d{6,7}

备用电话,7-8位,可多个,可没有:(?:,[1-9]\d{6,7}|)*

分机:7-8位,只能一个,可没有:(?:ext[1-9]\d{6,7}|)
lantianyuan 2006-12-11
  • 打赏
  • 举报
回复
我用最笨的办法写了这个:
^(86|886|852|65){1}([-]{1}[1-9]{2,3}[-]{1}[1-9]{7,8}){1}([,]{1}[1-9]{7,8})*((ext){1}[1-9]{1,}){0,1}$

但是不对喔.哪位帮忙看看有何不对

lantianyuan 2006-12-11
  • 打赏
  • 举报
回复
TO: j9988(j9988)

根据实际情况,电话号码应该为7或8位.
j9988 2006-12-11
  • 打赏
  • 举报
回复
备选电话如果有多个:
^(?:86|886|852|65)-[1-9]\d*-\d+(?:,\d[1-9]\d*|)*(?:ext[1-9]\d*|)$
j9988 2006-12-11
  • 打赏
  • 举报
回复
上面忘了不能以0开头,这个是正确的.
^(?:86|886|852|65)-[1-9]\d*-\d+(?:,\d[1-9]\d*|)(?:ext[1-9]\d*|)$
lantianyuan 2006-12-11
  • 打赏
  • 举报
回复
^(86|886|852|65){1}([-]{1}[1-9]{2,3}[1-9]{7,8}){1}([,]{1}[1-9]{7,8})*((ext){1}[1-9]{1,})*

也不对,忘了说了,分机只能有一个。
lantianyuan 2006-12-11
  • 打赏
  • 举报
回复
^(86|886|852|65){1}([-]{1}[1-9]{2,3}[1-9]{7,8}){1}([,]{1}[1-9]{7,8})*((ext){1}[1-9]{1,})*

改了一下,看看这样对不对.
先贴出来,再测试呵呵.
j9988 2006-12-11
  • 打赏
  • 举报
回复
^(?:86|886|852|65)-[1-9]\d*-\d+(?:,\d+|)(?:ext\d+|)$

验证这类格式:
86-10-888888,12345678ext12346789
mobydick 2006-12-11
  • 打赏
  • 举报
回复
......用这个,没看到ext那部分。
string regexStr = "((86|886|852|65)-[^0]\\d+-[^0]\\d+)(ext[^0]\\d)?(,((86|886|852|65)-[^0]\\d+-[^0]\\d+)(ext[^0]\\d)?)?";
lantianyuan 2006-12-11
  • 打赏
  • 举报
回复
^(86 ¦886 ¦852 ¦65){1}([-]{1}[1-9]{2,3}[0-9]{7,8}){1}([,]{1}{7,8})*((ext){1}[0-9]{1,})

好象不对,不满足以下条件吧?:
电话与分机也不能以0开头
备选电话里没有指明是数字??.
分机也能出现0次
mobydick 2006-12-11
  • 打赏
  • 举报
回复
给几个测试用例吧。
string regexStr = "^(86|886|852|65)-[^0]\\d+-[^0]\\d+(,(86|886|852|65)-[^0]\\d+-[^0]\\d+)?$";
oldmoon 2006-12-11
  • 打赏
  • 举报
回复
不难,只是要自己仔细点拼
oldmoon 2006-12-11
  • 打赏
  • 举报
回复
^(86|886|852|65){1}([-]{1}[1-9]{2,3}[0-9]{7,8}){1}([,]{1}{7,8})*((ext){1}[0-9]{1,})
lantianyuan 2006-12-11
  • 打赏
  • 举报
回复
呵呵.如果简单了,就自己写了.感觉也不是特麻烦吧.我自己也正在尝试中.
ustbwuyi 2006-12-11
  • 打赏
  • 举报
回复
要求好多啊,只有比较通用的

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧