来自Array的Javascript黑名单部分单词

时间:2016-04-12 14:26:52

标签: javascript jquery arrays

我有一个页面,管理员可以设置列入黑名单但不允许在电子邮件地址中使用的单词。在注册页面上,我有一个填充了所有这些单词的数组。此页面是内部的,用于请求创建多个电子邮件地址,因此对于每个请求的电子邮件地址,我需要查看数组中是否存在该单词。

我可以使用典型的jQuery inArray来做到这一点,但是我需要弄清楚如何实现部分匹配。

- 示例

var blackList = Array('admin', 'webform', 'spam');

... Loop over the requested email addresses and put them into an array

var requestedEmails = Array('dogs@cats.com', 'webform1@cats.com', 'admins@cats.com');

// Check for the exact match in the arrays
$(requestedEmails).each(function(){
    if(jQuery.inArray(this, blackList) != -1) {
        // Word is in the array
    } else {
        // Word is not in the array
    }
});

在上面的示例中,我需要它来捕获webform1admins,因为这两个词在某种程度上都存在于黑名单中。

从这里添加部分匹配的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

不需要使用jQuery。只是普通的老香草ES2015

检查数组中任何给定的电子邮件是否包含列入黑名单的单词:

var containsBlacklisted = requestedEmails
  .some(email => blackList
    .some(word => ~email.search(RegExp(word))));

仅过滤不包含黑名单的电子邮件,如下所示:

var approvedEmails = requestedEmails
  .filter(email => !blackList
    .some(word => ~email.search(RegExp(word))));