简单的PIN验证

时间:2016-07-03 08:47:55

标签: javascript

任务: ATM机允许4或6位PIN码,PIN码不能包含4位数或6位数字。 如果函数传递了有效的PIN字符串,则返回true,否则返回false。

我的解决方案:

function validatePIN (pin) {
  //return true or false
  if (!isNaN(pin) && Number.isInteger(pin) && pin.toString().length == 4 || pin.toString().length == 6) { 
    return true 
  } else { 
    return false 
  }
}

我得到的唯一错误是当我将4位数作为字符串传递("1234")时 - 它等于false

7 个答案:

答案 0 :(得分:4)

function validatePIN (pin) {
  // return true or false
  if (typeof pin === "string" && !~pin.indexOf('.') && !isNaN(Number(pin)) && (pin.length === 4 || pin.length === 6)) { 
    return true; 
  } else { 
    return false; 
  }
}

修改

现在只接受一个字符串," 1234.0"失败。

<强> EDIT2:

<00> 0000和000000成功,但可能不是最优雅的解决方案:)

<强> EDIT3:

添加了一个由GingerPlusPlus建议的简短示例。

function validatePIN (pin) {
    // return true or false
    return typeof pin === "string" && !~pin.indexOf('.') && !isNaN(Number(pin)) && (pin.length === 4 || pin.length === 6);
}

答案 1 :(得分:1)

function validatePIN(pin) {
var isNumber = /^\d+$/.test(pin) && (pin.length == 4 || pin.length == 6)
return isNumber
}

validatePIN('0193')

//returns true

答案 2 :(得分:0)

您可以使用Array.prototype.every()Array.prototype.some()String.prototype.match()

<input type="text" />
<button>validate pin</button>
<script>
  var validatePIN = (args) => {[...args] = args;
 return args.every(v => v.match(/\d/)) &&
    [4, 6].some(n => args.length === n)};

  document.querySelector("button")
  .addEventListener("click", (e) =>
    alert(validatePIN(e.target.previousElementSibling.value))
  )
</script>

答案 3 :(得分:0)

function validatePIN (pin) {
  //return true or false
  return /^\d+$/.test(pin) && (pin.length === 4 || pin.length === 6)
}

答案 4 :(得分:0)

function validatePIN (pin) {
    if (pin.length !== 4 && pin.length !== 6) {
    return false;
  }
  for (let i = 0; i < pin.length; i++) {
    if (pin[i] > '9' || pin[i] < '0') {
       return false;
    }

  }
  return true;
}

答案 5 :(得分:0)

这是解决使用正则表达式的另一种方法。

function validatePIN(pin) {
  return /^(\d{4}|\d{6})$/.test(pin)
}

validatePIN('2345')
//returns true

validatePIN('2.45')
//reutrns false

答案 6 :(得分:0)

function validatePIN (pin) {
  if (pin.length == 4 || pin.length == 6) 
    {
      for (let i = 0; i < pin.length; i++)
        {
          if (pin[i] == "0" ||
              pin[i] == "1" ||
              pin[i] == "2" ||
              pin[i] == "3" ||
              pin[i] == "4" ||
              pin[i] == "5" ||
              pin[i] == "6" ||
              pin[i] == "7" ||
              pin[i] == "8" ||
              pin[i] == "9") ;
          else return false;
        }
      return true;
    }
  else return false;
}

此代码检查PIN长度,并通过数字而不是数字传递所有测试任务...