我要做的就是检查输入是否包含给定数组的任何值。由于某种原因,它始终返回true;
document.querySelector('#phonenumber').addEventListener('change', function (e) {
let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
let target = e.target.value;
let splittedTarget = target.split('');
console.log(splittedTarget, alphabet)
if (alphabet.indexOf(splittedTarget) > -1) {
alert('there is not');
} else {
alert('there is');
}
});
答案 0 :(得分:1)
您可以在输入字符上使用.some()
:
const alphaInInput = !splittedTarget.some(elem => alphabet.indexOf(elem) > -1);
alphaInInput
将是boolean
。如果您的输入包含来自alphabet
字符串的字符,则它将为true
,如果不是,则为false
。
请参见下面的工作示例:
document.querySelector('#phonenumber').addEventListener('change', function (e) {
let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; // Remove .split() (no need for array)
let target = e.target.value;
let splittedTarget = target.split('');
const alphaInInput = splittedTarget.some(elem => alphabet.indexOf(elem) > -1);
// console.log(splittedTarget, alphabet)
if (!alphaInInput) {
alert('there is not');
} else {
alert('there is');
}
});
<input id="phonenumber" />
或者您可以通过以下模式regex
使用/[A-Za-z]/g
,然后使用.test()
查看是否输入匹配模式。
注意:/[A-Za-z]/g
测试从A到Z和a到z的字符,即字母字符串包含的内容:
document.querySelector('#phonenumber').addEventListener('change', function (e) {
let inputStr = e.target.value;
let regex = /[A-Za-z]/g;
let alphaInInput = regex.test(inputStr);
if (!alphaInInput) {
alert('there is not');
} else {
alert('there is');
}
});
<input id="phonenumber" />
答案 1 :(得分:0)
Array<String>.indexOf(Array)
始终为-1
,因为String
的列表不包含Array
。您需要使用其他方法来验证输入。
答案 2 :(得分:0)
改为使用它,我进行了测试并且有效
document.querySelector('#phonenumber').addEventListener('change', function (e) {
let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
let target = e.target.value;
let splittedTarget = target.split('');
if(splittedTarget.every(r => alphabet.indexOf(r) < 0)){
alert('only numbers');
} else {
alert('there is letter');
}
});