|
本帖最后由 lingyuncelia1 于 2016-5-2 16:46 编辑
小灵通:8302143918928509692,肉眼看得出手机号码是:18928509692,
但用reg.Pattern = "1\d{10}",会变成:
14391892850
如果用reg.Pattern = "189\d{8}",那如果电话是移动、联通呢,那代码岂不是好长?
有时登记电话的人就是懒到出汁,连个空格都无,连个“、\-()[]”都无。
女189299399660,男13929950449 | 肉眼看得出女人的手机多了一位数,无效。
应该可以应付大多数情况了。 - Sub tt()
- arr = Range("a1:a" & [a65536].End(3).Row)
- For i = 2 To UBound(arr)
- x = arr(i, 1)
- j = 4
- For k = 1 To Len(x) '把所有非数字用","代替
- If Not IsNumeric(Mid(x, k, 1)) Then Mid(x, k, 1) = ","
- Next
- xrr = Split(x, ",") '以","分离字符串
- For Each x In xrr
- Do While Len(x) >= 11 '当字符串长度>=11(表示有可能出现手机号)
- xh = Right(x, 11) '从后往前找
- If Left(xh, 1) = "1" Then '找到一个手机号
- j = j + 1
- Cells(i, j) = xh
- x = Left(x, Len(x) - 11) '长度减11
- Else
- x = Left(x, Len(x) - 1) '没找到,长度减1继续找
- End If
-
- xq = Left(x, 11) '从前往后找
- If Left(xq, 1) = "1" Then '找到一个手机号
- j = j + 1
- Cells(i, j) = xq
- x = Mid(x, 12) '长度减11
- Else
- x = Mid(x, 2) '没找到,长度减1继续找
- End If
- Loop
- Next
- Next
- End Sub
复制代码
|
|