首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换mailto链接

替换mailto链接
EN

Stack Overflow用户
提问于 2012-07-01 19:07:02
回答 2查看 1.2K关注 0票数 2

我得到了这个示例字符串:

代码语言:javascript
复制
var content = "Lorem ipsum dolor sit amet <a href=\"mailto:info@xxx.com\">info@xxx.com</a> ipsum dolor <a href=\"mailto:info@yyy.eu\">info@yyy.eu</a> adipiscing elit.";

当字符串包含mailto-link时,我想替换(操纵) a-tag的所有匹配项。

操纵后的锚点应该是这样的:

代码语言:javascript
复制
<a href="#" title="protected">in..@xxx.com</a>

内容字符串可以包含任意数量的mailto链接。

我怎样才能最好地完成这项任务?

EN

回答 2

Stack Overflow用户

发布于 2012-07-01 23:06:58

如果你有XHTML,那么就像Chuck展示的那样使用XElement。

如果不是,那么正则表达式就是可行的方法。类似于:

代码语言:javascript
复制
Regex find = new Regex("<a\\b[^>]*href=['\"]mailto:(.*?)['\"]", RegexOptions.Singleline | RegexOptions.IgnoreCase);

警告,我没有测试上面的代码,但我有99%的把握它是正确的。此外,我可能在电子邮件地址中漏掉了一个边角大小写,例如a>。

票数 2
EN

Stack Overflow用户

发布于 2012-07-01 21:25:50

将内容转换为XML,然后简单地搜索包含以mailto:开头的hrefa标记

要使用XPath:using System.Xml.XPath;,需要使用下面的代码

代码语言:javascript
复制
var content = "Lorem ipsum dolor sit amet <a href=\"mailto:info@xxx.com\">info@xxx.com</a> ipsum dolor <a href=\"mailto:info@yyy.eu\">info@yyy.eu</a> adipiscing elit.";

XElement x = XElement.Parse(string.Format("<root>{0}</root>", content));
var hrefs = x.XPathSelectElements("a[starts-with(@href, 'mailto:')]");
foreach (XElement href in hrefs)
{
    href.Attribute("href").Value = "#";
    href.Add(new XAttribute("title", "protected"));

    string email = href.Value;
    int at = email.IndexOf('@');
    if(at > 0)
    {
        string username = email.Substring(0, at);
        string domain = email.Substring(at);
        if (username.Length > 2)
            href.Value = string.Format("{0}..{1}", 
                username.Substring(0, 2), domain);
    }
}
string result = string.Concat(x.Nodes().ToArray());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11281432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档