【问题标题】:check if an input is of this form检查输入是否为这种形式
【发布时间】:2023-02-05 10:44:43
【问题描述】:

我有一段代码,用户可以在其中输入多个字符串并将它们存储在一个数组中,然后我想检查所有输入是否有效。

有效输入是具有相同字符重复 3 次的数字。
例如:'333', '999', '222', ...

我试过的:

let valid = true;
inputs.forEach((input) => {
    if (input.length !== 3 ||  isNaN(input)) {
      valid = false;
    } else {
      const first = input[0];
      for (let i = 1; i < 3; i++) {
          console.log(first,input[i])
        if (input[i] !== first) {
            valid = false;
        }
      }
    }
  });
console.log(valid);

这段代码正在运行,我想知道我是否可以做得更好似乎我为这个简单的任务使用了太多代码,我想知道当我在实习生中搜索时是否有更简单的代码,他们建议 rejex 但就是这样对我来说很复杂谢谢你帮助我

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    首先,对于初学者来说,您的解决方案很好并且正确恭喜,但是您可以对其进行优化并使其更简单

    1. 您可以使用every代替forEach,一旦发现无效输入,就无需检查所有输入
    2. 您可以检查输入是否不能被 111 整除,而不是循环输入 ;)
      if(input[0] === '.'){ // added this condition because .55 is a number
            isValid = false
      }else {
        if(parseInt(input) % 111 !== 0) valid = false;
      }
      

    【讨论】:

      【解决方案2】:

      你可以使用Array#every

      let valid = inputs.every(s => s.length === 3 && !isNaN(s) 
                        && [...s].every(c => c === s[0]));
      

      这可以用正则表达式缩短:

      let valid = inputs.every(s => /^(d){2}$/.test(s));
      

      【讨论】:

      • 这确定是自以为是?并且应该转移到codereview?
      猜你喜欢
      • 2021-09-29
      • 2018-05-26
      • 1970-01-01
      • 2016-05-19
      • 2018-04-14
      相关资源
      最近更新 更多