用于支持mailto链接的外部链接的Speedbump

时间:2017-10-16 18:12:09

标签: javascript regex

我们有这个speedbump代码,向用户提供他们即将离开网站的通知(它是ADA的事情)。它看起来像在正则表达式中完成,我现在被要求支持mailto:链接。我是正则表达式中最差的,这已经令人难以置信。有没有人有任何指示?

这是当前处理主机名评估的代码段:

var re = new RegExp("^(http(s)?:)?\\/\\/([a-z0-9-_\\.]*\\.)?(" + whitelist.join("|").replace(/\./g, "\\.") + ")(\\/.*)?$", "i");

$('a').each(function() {
    var hrefTest = $(this).attr('href');

    if (hrefTest) {
        if (!re.test(hrefTest) && (hrefTest.substring(0,4) == 'http')) {
            $(this).addClass('speedbump-enabled');
        }
    }
});

基本上,如果用户点击的链接与当前主机名不匹配,我们会向他们显示一个弹出窗口,提醒他们他们即将离开该网站。

白名单部分是一个单独的逻辑,允许主机名的白名单忽略speedbump弹出窗口(即,主机名不显示它)。

更新&可能的解决方案

我最后改变了:

if ( !re.test(hrefTest) && (hrefTest.substring(0,4) == 'http') ) {

...到...

if ( !re.test(hrefTest) && ( (hrefTest.substring(0,4) == 'http') || (hrefTest.substring(0,6) == 'mailto') ) ) {

这似乎已经完成了mailto链接的技巧,但还没有100%肯定。仍在测试以确认它是一个可行的解决方案。

1 个答案:

答案 0 :(得分:1)

我不确定mailto:Links的官方定义,但是跟随正则表达式匹配Wikipedia上提到的所有示例

mailto:(?:[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)?(?:,[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)*(?:[\?\&](?:(?:subject)|(?:body)|(?:b?cc)|(?:to))=[^\&\?\n]*)*

对于测试用例,请参阅regex101