用多个值改进if-else?

时间:2017-04-18 13:46:06

标签: javascript if-statement

有更好的方法吗?

if(cpf.length !== 11 || cpf === "00000000000" || cpf === "11111111111" ||
        cpf === "22222222222" || cpf === "33333333333" || cpf === "44444444444" ||
        cpf === "55555555555" || cpf === "66666666666" || cpf === "77777777777" ||
        cpf === "88888888888" || cpf === "99999999999"){

3 个答案:

答案 0 :(得分:3)

你可以辩论这是否更好但这就是我喜欢在这种情况下做的事情:

// Name this something relevant to the problem
var possibleValues = ["0000000000", ...];
if (possibleValues.includes(cpf)) {
  // do stuff
}

或者如果您所处的环境没有includes

if (possibleValues.indexOf(cpf) > -1) {
  // do stuff
}

另一种可能性是使用正则表达式:

if (cpf.length === 11 && cpf.match(/^(\d)\1+$/)) {
  // do stuff
}
  • ^:从头开始
  • (\d):找一个数字并记住它
  • \1+:重复查找记住的数字
  • $:点击字符串
  • 的结尾

答案 1 :(得分:2)

使用indexOf类似

的内容
var possibleValues = [ "00000000000", "1111111111" ]; //add more values

if ( cpf.length != 11 || possibleValues.indexOf( cpf ) != -1 )
{
  //value matching
}

答案 2 :(得分:0)

使用isNaN()RegExp.text()函数的替代 Ecmascript5 解决方案:

if (cpf.length !== 11 || (!isNaN(f = cpf[0]) && new RegExp("^"+ f + "{11}$").test(cpf))) {
    // do something
}

isNaN() - 检查我们是否只有数字(在开始时)

new RegExp("^"+ f + "{11}$").test(cpf) - 测试我们是否有一个相同的11位序列