JS phone 数字验证-匹配字符串

JS phone number validation - matching strings

我需要做的就是检查输入是否包含给定数组的任何值。出于某种原因,它 returns 总是正确的;

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

Fiddle link: https://jsfiddle.net/et5avosu/

Array<String>.indexOf(Array) 始终是 -1,因为 String 的列表不包含 Array。您需要使用其他方法来验证输入。

您可以在输入字符上使用 .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" />

改用这个,我测试过并且有效

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