我的if语句只评估第一个条件,第二个条件评估在||之后 被忽视了.如何解决这个问题?
function validateAge(input) {
if ((input.value < 0 || input.value > 110) || (input.value.match(/[^0-9]/))) {
input.setCustomValidity("Dozwolony zakres: od 0 do 110");
} else {
input.setCustomValidity("");
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,有一种叫做懒惰的评价.如果没有必要,JavaScript解释器将不会评估某些内容.在disjunction(||
)中,当第一个语句求值时true
,整个表达式为真,这就是为什么当JavaScript解释器计算:(input.value < 0 || input.value > 110)
为true时,没有必要计算它的值(input.value < 0 || input.value > 110)
.
如果(input.value.match(/[^0-9]/))
是"show stopper",您可以按以下方式进行:
if ((input.value.match(/[^0-9]/)) || (input.value < 0 || input.value > 110))
Run Code Online (Sandbox Code Playgroud)
如果我理解正确你需要这样的东西:
function validateValue(input) {
var value = input.value;
if (/^\d+$/.test(value)) {
value = parseInt(value, 10);
} else {
return false;
}
return value < 0 || value > 110;
}
Run Code Online (Sandbox Code Playgroud)