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

javascript全局捕获中的正则表达式失败,javascript,regex,Javascript,Regex,上面的正则表达式有什么问题?在这种情况下,我希望true。validatePin与validatePin不一样,3627i1与'3627i1'不一样 因此,请确保您正在调用正确的函数并向其传递正确的参数: var r = new RegExp('^[0-9]*$'); function validatePIN (pin) { //return true or false if(r.test(pin) && pin.length == 4 || pin.length ==

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

validatePin
validatePin
不一样,
3627i1
'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));

代码中的语法错误

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
因为它实际上意味着
(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)

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

首先是
validatePin(3627i1)
这不是您定义的函数,它已经回答了这个问题。只要把逻辑括号放在它们必须在的地方
r.test(pin)和&(pin.length==4 | | pin.length==6)
将允许输入中的任何字符,但将限制其出现4或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})?$/