基本上,输入字段只是一个字符串。人们以各种格式输入他们的电话号码。我需要一个正则表达式来查找并将这些数字转换为链接。
输入示例:
(201) 555-1212
(201)555-1212
201-555-1212
555-1212
这就是我想要的:
<a href="tel:(201)555-1212">(201) 555-1212</a> - Notice the space is gone
<a href="tel:(201)555-1212">(201)555-1212</a>
<a href="tel:201-555-1212">201-555-1212</a>
<a href="tel:555-1212">555-1212</a>
我知道它应该比仅删除空格更强大,但它适用于我的员工将从他们的iPhone访问的内部网站。所以,我愿意“让它运转起来。”
这是我目前在C#中所拥有的内容(它应该向您展示我对正则表达式的了解程度):
strchk = Regex.Replace(strchk, @"\b([\d{3}\-\d{4}|\d{3}\-\d{3}\-\d{4}|\(\d{3}\)\d{3}\-\d{4}])\b", "<a href='tel:$&'>$&</a>", RegexOptions.IgnoreCase);
任何人都可以通过修复此建议或建议更好的方法来帮助我吗?
修改
谢谢大家。这是我到目前为止所得到的:
strchk = Regex.Replace(strchk, @"\b(\d{3}[-\.\s]\d{3}[-\.\s]\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]\d{4}|\d{3}[-\.\s]\d{4})\b", "<a href='tel:$1'>$1</a>", RegexOptions.IgnoreCase);
除了带有(nnn)区号的那些区域之外,几乎所有区域都在拾取,它与7位数字之间有或没有空格。它确实拿起7位数字并以这种方式链接。但是,如果指定了区号,则不会匹配。知道我做错了吗?
第二次修改:
现在就开始工作了。我所做的就是从字符串的开头删除\b
。
答案 0 :(得分:1)
移除[]
并在每个\s*
周围添加\-
(零个或多个空格字符)。
此外,您无需转义-
。 (您可以从\
)
\-
说明:[abcA-Z]
是字符组,匹配a
,b
,c
或{{1}之间的任何字符}和A
。
这不是你想要做的。
回复您更新的正则表达式:
Z
更改为[-\.\s]
以匹配其中任何一个或多个字符(例如,[-\.\s]+
周围有空格)-
与空格和\b
之间的边界不匹配。答案 1 :(得分:1)
Afaik,没有手机输入其他字符,为什么不用[^0-9]
替换''
?
答案 2 :(得分:1)
这是我用来查找电话号码的正则表达式:
(\+?\d[-\.\s]?)?(\(\d{3}\)\s?|\d{3}[-\.\s]?)\d{3}[-\.\s]?\d{4}
它非常灵活......允许各种格式。
然后,使用一堆后引用而不是杀死自己试图用空格替换它,而是将匹配传递给函数,然后根据需要剥离空格。
C#/。net 应该有一个允许函数作为替换参数的方法......
编辑:他们称之为“MatchEvaluator。该示例使用委托,但我很确定您可以使用稍微不那么详细的
(m) => m.Value.Replace(' ', '')
或者其他什么。在这里工作。