这里我们需要一些正则表达式的魔法。首先我们找到电子邮件。我希望我们不需要验证它们,所以任何没有空格的单词都带有 @ 后跟 .没问题。
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>" );
}
$& - 表示正则表达式中的当前匹配项。
要查找 Url,我们假设它们以某个协议名称开头,后跟 ://,同样,其中不允许有空格。
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/,但我希望不是这样,因为那样我们将不得不使用一些更严格的正则表达式。