javascript - 外部链接的 Speedbump 也支持 mailto 链接

标签 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% 确定。仍在测试以确认它是一个可行的解决方案。

最佳答案

我不确定 mailto 的官方定义:链接,但以下正则表达式匹配 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

关于javascript - 外部链接的 Speedbump 也支持 mailto 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46776582/

相关文章:

java - 如何使用 Java Regex 将特定字符串放入数组?

php - 获取所需的 javascript 错误对象

javascript - Google Maps API v3 BrowserIsCompatible

javascript - 如何在过滤器中访问父重复模板中的项目

Java 正则表达式子字符串后跟逗号字符

JavaScript,正则表达式,将前导零添加到字符串中包含的所有数字

javascript - noflo.js 可以在浏览器中使用吗?

javascript - 替换数组的字段

c# - 为什么这个正则表达式不能正确匹配?

java - 为什么我的程序不等待输入?