JS电话号码验证-匹配字符串

时间:2018-11-27 11:03:07

标签: javascript string validation indexof

我要做的就是检查输入是否包含给定数组的任何值。由于某种原因,它始终返回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');
    }
});

中部链接:https://jsfiddle.net/et5avosu/

3 个答案:

答案 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');
    }
  });