需要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标签中删除非数字。

我不知道为什么我对正则表达式如此挑剔!

需要Regex帮助格式化电话号码

在正则表达式中,如果它遵循"大于"(>),则以独占方式保持匹配将允许您排除要更改的数字:

(?<=>)['+]?('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]*