JavaScript全局捕获中的正则表达式失败

Regex in javascript global catch failed

本文关键字:正则表达式 失败 全局 JavaScript      更新时间:2023-09-26
var r = new RegExp('^[0-9]*$');
function validatePIN (pin) {
  //return true or false
  if(r.test(pin) && pin.length == 4 || pin.length == 6){
    return true;
  }else{
    return false;
  }
}
console.log(validatePin(3627i1));

上面的正则表达式有什么问题?我希望在这种情况下true

没有什么大问题,但这些条件将无法正确评估:

r.test(pin) && pin.length == 4 || pin.length == 6

因为它实际上意味着由于&&的运算符优先级高于|| (r.test(pin) && pin.length == 4) || pin.length == 6

您需要将条件括在括号中:

r.test(pin) && (pin.length == 4 || pin.length == 6)

顺便说一句,你甚至不需要在之后检查长度,因为你可以在正则表达式本身中做到这一点:

var r = /^[0-9]{4}(?:[0-9]{2})?$/

现在,此正则表达式将匹配 4 位数字或 6 位数字。

validatePin

validatePIN不同,3627i1'3627i1'不同。

因此,请确保您调用了正确的函数并向其传递了正确的参数:

console.log(validatePIN('3627i1'));

代码中的语法错误,

var r = new RegExp('^[0-9]*$');
function validatePIN (pin) {
  //return true or false
  if(r.test(pin) && pin.length == 4 || pin.length == 6){
    return true;
  }else{
    return false;
  }
}
console.log(validatePIN("3627i1")); //call valid function, parameter = string