需要Regex帮助格式化电话号码
本文关键字:电话号码 格式化 帮助 Regex 需要 | 更新日期: 2023-09-27 18:25:57
我需要一个C#Regex模式来查找字符串中的电话号码并重新格式化它们。
电话号码可以是任何格式,例如00 0000 0000或(00)0000 0000或+00 0 0000 0000或0000 0000或00-0000-0000或类似格式。所以我基本上是在寻找至少8个字符的0-9,加号,减号,空格或括号,最多20个字符。这个字符串只包含电话号码和一点文本,所以任何其他数字都不会有问题。
我想用从a标签中去掉的非数字来替换用该电话号码的超链接找到的号码,就像下面的例子一样。
<a href="tel:0000000000">00 0000 0000</a>
这是我自己想出的几乎有效的代码:
string regex = @"('b[0-9+'(]['(')0-9 +-]{6,20}[0-9]'b)";
Regex r = new Regex(regex, RegexOptions.IgnoreCase);
litTelephone.Text = r.Replace(faculty.Telephone, "<a href='"tel:$1'">$1</a>");
它适用于许多数字,但如果它位于字符串的开头(它去掉了前导加号),它就不会出现这个例子+00 0000 0000。它也不会从A标签中删除非数字。
我不知道为什么我对正则表达式如此挑剔!
在正则表达式中,如果它遵循"大于"(>),则以独占方式保持匹配将允许您排除要更改的数字:
(?<=>)['+]?('b[0-9+'(]['(')0-9 +-]{6,20}[0-9]'b)
类似的东西也可以处理扩展:
(?<=>)(['+0-9]{1,3}([ '.'-])?)?(['(]{1}[0-9]{3}[')])?([0-9A-Z '.'-]{1,32})((x|ext|extension)?[0-9]{1,4}?)
很抱歉过度编辑了我的答案。
您将如何处理那些有人输入未拨号的额外数字的国家。一个例子是英国,+44(0)20 7451 8123被拨成+444045181123。除非您在英国,否则不会拨打(0),在这种情况下,您不拨打+44,而是拨打02074518123。
同样,在俄罗斯和其他前苏联国家,你可能会看到以8开头的数字,除非你都在同一个国家,而不是在同一座城市,否则你不会拨打8。
最好完全忘记正则表达式。分析数字,像我提到的那样,应用当地规则去掉数字,然后通过应用国家/地区规则进行格式化,以便正确显示这三个英国数字:
+44 20 8123 7451
+44 1245 261 766
+44 7825 23 45 67
最后一个是一个移动电话号码,它需要你识别它有一个移动拨号前缀。
当然,如果你在一个国家,只要扔掉任何不是数字的东西,然后检查前几个数字的国际或长途拨号代码,并将其标准化为+国家代码。"非数字"的正则表达式是[^0123456789]*