我们在这里需要一些正则表达式的魔法。首先我们找到电子邮件。我希望我们不需要验证它们,所以任何不带空格的单词都带有 @ 后跟 . 没关系。
public static string MakeEmailsClickable( string input ){
if (string.IsNullOrEmpty(input) ) return input;
Regex emailFinder = new Regex(@"[^\s]+@[^\s\.]+.[^\s]+", RegexOptions.IgnoreCase);
return emailFinder.Replace(input, "<a href=\"mailto:$&\">$&</a>" );
}
$&
- 表示正则表达式中的当前匹配。
为了找到 Urls,我们假设它们以一些协议名称开头,后跟://
,同样不允许有空格。
public static string MakeUrlsClickable( string input ){
if (string.IsNullOrEmpty(input) ) return input;
Regex urlFinder = new Regex(@"(ftp|http(s)?)://[^\s]*", RegexOptions.IgnoreCase);
return urlFinder.Replace(input, "<a href=\"$&\">$&</a>" );
}
这个会查找 ftp、http 或 https 链接,但您可以将任何协议添加到正则表达式中,用(管道)将其分隔,如下所示|
:(file|telnet|ftp|http(s)?)://[^\s]*)
实际上 URL 中也可能有 @ http://username:password@host:port/
,但我希望不是这样,因为那时我们将不得不使用一些更严格的正则表达式。