这个问题与JavaScript有关。 如果输入是以下任何一个数组“ hello,hi,yo或hey”,则我希望该值返回true,但只返回false。
我尝试了多种方法,例如toString(),includes()等。
function myFunction() {
var arr1 = [/hello/i, /\bhi/i, /\bhey/i, /\byo\s/i];
var b = document.getElementById("input1").value;
for (i = 0; i < arr1.length; i++) {
var greeting1 = arr1[i].test(b);
greeting1.toString()
document.getElementById("demo").innerHTML = greeting1
}
}
<input type="text" id="input1">
<button type="submit" onclick="myFunction()">Test</button>
<p id="demo"></p>
我希望该值返回true。
答案 0 :(得分:3)
您可以使用Array.prototype.some()
来检查至少一个正则表达式是否匹配。我对您的代码做了一些修改,仅举一个例子:
function myFunction(value) {
var arr1 = [/hello/i, /\bhi/i, /\bhey/i, /\byo\s/i];
console.log(arr1.some(a => a.test(value)));
}
myFunction('hello');
您的代码中的问题是您要用for
循环的每次迭代结果覆盖文本。
答案 1 :(得分:2)
一种解决方案是一旦正则表达式break
返回test()
,就进行true
循环:
function myFunction()
{
var arr1 = [/hello/i, /\bhi/i, /\bhey/i, /\byo\s/i];
var b = document.getElementById("input1").value;
var res = false;
for (i = 0; i < arr1.length; i++)
{
res = arr1[i].test(b);
if (res)
break;
}
document.getElementById("demo").innerHTML = res;
}
<input type="text" id="input1">
<button type="submit" onclick="myFunction()">Test</button>
<p id="demo"></p>
但是,您可以使用Array.some()来简化代码:
function myFunction() {
var arr1 = [/hello/i, /\bhi/i, /\bhey/i, /\byo\s/i];
var b = document.getElementById("input1").value;
document.getElementById("demo").innerHTML = arr1.some(regexp => regexp.test(b));
}
<input type="text" id="input1">
<button type="submit" onclick="myFunction()">Test</button>
<p id="demo"></p>