求电话号码的正则表达式!!!

一只熊猫 2009-09-26 11:38:41
现在库里的电话号码非常的不规则,因为需要实现自动拨号,所以要把号码都规范为如01088888888、13888888888这样的只有区号号码且只有数字的格式。

现在库里的电话号码像下面这些:

1、86-010-888888888 带国家代码、连接符
2、010-88888888-888 带分机、连接符
3、2588888888 区号少第一位0
4、宅电888888888 带汉字
5、(010)888888888 带括号
6、01388888888 带0的手机号
7、138 8888 8888 带空格
8、135@8888!@8888 带其他字符
9、超长的号码
等等

谢谢,大家帮帮忙。
...全文
1043 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
youyousl 2011-04-12
  • 打赏
  • 举报
回复
XUEXI
flyerwing 2009-09-27
  • 打赏
  • 举报
回复
学习!
david0623 2009-09-27
  • 打赏
  • 举报
回复
学习学习!
mxc1225 2009-09-27
  • 打赏
  • 举报
回复
过客就是强悍啊!?
-过客- 2009-09-26
  • 打赏
  • 举报
回复
看下这样是不是你要的结果吧

Dim tels As String() = New String() {"86-010-88888888", "010-88888888-888", "2588888888", "宅电88888888", "(010)88888888", "01388888888", "138 8888 8888", "135@8888!@8888"}
Dim temp As String = String.Empty
Dim regF As Regex = New Regex("[^0-9()()-]")
Dim regT As Regex = New Regex("^(?!0)[0-9]{2,3}-|-[0-9]{3,4}$|[()()-]")
Dim regM As Regex = New Regex("^0?1[35]")
For Each s As String In tels
temp = regF.Replace(s, "")
temp = regT.Replace(temp, "")
If regM.IsMatch(temp) Then
temp = temp.TrimStart("0"c)
ElseIf temp.Length > 8 And temp.Length < 13 And Not temp.StartsWith("0") Then
temp = "0" + temp
End If
RichTextBox2.Text += "源字符串: " & s.PadRight(25, " "c) & "格式化: " & temp & vbCrLf
Next
/*输出
源字符串: 86-010-88888888 格式化: 01088888888
源字符串: 010-88888888-888 格式化: 01088888888
源字符串: 2588888888 格式化: 02588888888
源字符串: 宅电88888888 格式化: 88888888
源字符串: (010)88888888 格式化: 01088888888
源字符串: 01388888888 格式化: 1388888888
源字符串: 138 8888 8888 格式化: 13888888888
源字符串: 135@8888!@8888 格式化: 13588888888
*/
-过客- 2009-09-26
  • 打赏
  • 举报
回复
还有例子5中的括号在数据源中是全角还是半角,还是都有可能出现
-过客- 2009-09-26
  • 打赏
  • 举报
回复
再确认一下,例子1、4、5中的号码都是9位,到了结果中是8位,是楼主笔误,还是数据源确实就是这样的,如果数据源确是这样,那如何取舍,去掉哪一位?
一只熊猫 2009-09-26
  • 打赏
  • 举报
回复
好的,我不懂正则表达示,抱歉。
9位号码是我打错了。。。。

1、86-010-888888888 01088888888
2、010-88888888-888 01088888888
3、2588888888 02588888888
4、宅电888888888 88888888
5、(010)888888888 01088888888
6、01388888888 13888888888
7、138 8888 8888 13888888888
8、135@8888!@8888 13588888888
9、过长号码的情况不太好定,我自己来过滤掉吧。
-过客- 2009-09-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 going1981 的回复:]
1、86-010-888888888  带国家代码、连接符
2、010-88888888-888  带分机、连接符
3、2588888888        区号少第一位0
4、宅电888888888    带汉字
5、(010)888888888  带括号
6、01388888888      带0的手机号
7、138 8888 8888    带空格
8、135@8888!@8888    带其他字符
9、超长的号码[/Quote]

给出每一个例了对应的格式化后的结果

还有你的例子中的4和5,号码都是9位,正常是不会出现这样的号码的,那怎么处理?例子9给出实例,没例子没办法处理
lgx1972 2009-09-26
  • 打赏
  • 举报
回复
学习
-过客- 2009-09-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 going1981 的回复:]
发现一个小问题:010-69523408-(2) 转换成了 010695234082
[/Quote]

试下
Dim regT As Regex = New Regex("^(?!0)[0-9]{2,3}-|-[0-9]{3,4}$|[()()-]")
'替换为
Dim regT As Regex = New Regex("^(?!0)[0-9]{2,3}-|-[0-9]{3,4}$|-[((][0-9]{1,4}[))]$|[()()-]")
一只熊猫 2009-09-26
  • 打赏
  • 举报
回复
发现一个小问题:010-69523408-(2) 转换成了 010695234082
一只熊猫 2009-09-26
  • 打赏
  • 举报
回复
代码非常的好啊 , 扫了一遍没发现有问题,,太谢谢咯。
王向飞 2009-09-26
  • 打赏
  • 举报
回复
学习
-过客- 2009-09-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 going1981 的回复:]
全角和半角都可能出现的。
[/Quote]

那就试下5楼的代码,看下还有哪里不满足的,给出实例吧

另外,例子6应该是号码少了一位
一只熊猫 2009-09-26
  • 打赏
  • 举报
回复
全角和半角都可能出现的。
一只熊猫 2009-09-26
  • 打赏
  • 举报
回复
上面的9位号码是我笔误了。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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