我正在尝试学习是否有一个javascript方法来搜索字符串以查看该字符串是否包含字符串数组中的任何值。
一个例子是:
var a = 'How now brown cow';
var b = new Array('red', 'green', 'brown');
结果函数将返回true,因为单词brown包含在字符串a
中。
更具体地说,我要做的是(除了使用表单输入中的值):
var a = '12345@gmail.com';
var b = new Array('.com', '.net', '.org');
这也应该返回true。然后基于此,我将接受var a
作为有效。
我现在的实际代码(总是返回null
)如下:
function check_domain(){
for(var i=0; i<domains.length; i++){
var d = domains[i];
if(elemen.value.indexOf(d) != d){
return null;
}
else{
vEmail.style.visibility = 'visible';
}
}
}
window.domains = new Array(....Array values here....);
答案 0 :(得分:2)
您可以从数组中创建正则表达式:
var re = new RegExp(domains.join('|').replace(/\./g,'\\.'));
然后你可以测试一个字符串:
var a = '12345@gmail.com';
var found = re.test(a);
答案 1 :(得分:1)
不确定为什么你有.indexOf(d) != d
。不应该是:
function check_domain(){
var d, i;
for(i = 0; i < domains.length; i++){
d = domains[i];
if(elemen.value.indexOf(d) != -1) {
return true;
}
}
}
答案 2 :(得分:0)
是的,有一些名为正则表达式的东西,如果你真的需要它来匹配数组中的值,你可以创建一个循环并检查字符串中的每个单词,如下所示:
var a = 'How now brown cow';
var b = new Array('red', 'green', 'brown');
function Check(target, lookFor)
{
for(var I = 0, L = lookFor.length; I <= L; I++)
if(new RegExp(lookFor[I]).test(target))
return true;
return false;
}
alert(Check(a, b));
但是在你的情况下,最好的解决方法就是将目标字符串中想要查找的所有单词加入到一个正则表达式中,这样就可以避免使用循环。
if(/(\.com|\.net|\.org)$/.test("sfdsdfsdf@gmail.com"))
{
// Valid email
}
else
{
// Invalid email
}