2016-04-12 77 views
0

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

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

- 实施例

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

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

var requestedEmails = Array('[email protected]', '[email protected]', '[email protected]'); 

// 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既是对那些词存在于以某种方式黑名单。

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

+2

的可能的复制[如何检查一个字符串是否包含另一个子字符串?](http://stackoverflow.com/questions/1789945/how-can-i-check-if-one-string-contains-another-substring) – Craicerjack

+1

哪个jQuery版本你正在用吗?如果您的版本足够高,请使用grep http://api.jquery.com/jquery.grep/ –

+0

1)'inArray',2)循环,然后与'substr'比较。 3.)使用Levenshtein距离 – st2erw2od

回答

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)))); 
+0

Lol在“Plain old vanilla ES2015”。我不确定这是一个准确的描述,但A +是一个很好的解决方案。 – naomik