我有一个页面,管理员可以设置列入黑名单但不允许在电子邮件地址中使用的单词。在注册页面上,我有一个填充了所有这些单词的数组。此页面是内部的,用于请求创建多个电子邮件地址,因此对于每个请求的电子邮件地址,我需要查看数组中是否存在该单词。
我可以使用典型的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
}
});
在上面的示例中,我需要它来捕获webform1
和admins
,因为这两个词在某种程度上都存在于黑名单中。
从这里添加部分匹配的最佳方法是什么?
答案 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))));