2014-02-06 48 views
2

我的if语句只评估第一个条件,第二个在||之后。被忽视。如何解决这个问题?JavaScript 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(""); 
    } 
} 
+3

什么'input.value'的价值?因为如果'input.value <0'给出'true',那么它不需要任何其他表达式。 –

回答

6

那么,有一种叫做lazy evaluation。如果没有必要这样做,JavaScript解释器不会评估它。在第一个语句的计算结果为true的情况下,当第一个语句的计算结果为||时,整个表达式为真,所以这就是为什么当JavaScript解释器评估为(input.value < 0 || input.value > 110)为真时,没有必要计算(input.value < 0 || input.value > 110)的值。

如果(input.value.match(/[^0-9]/))是“秀塞”,您可以继续通过以下方式:

if ((input.value.match(/[^0-9]/)) || (input.value < 0 || input.value > 110)) 

如果我理解正确的,你需要的东西,如:

function validateValue(input) { 
    var value = input.value; 
    if (/^\d+$/.test(value)) { 
    value = parseInt(value, 10); 
    } else { 
    return false; 
    } 
    return value < 0 || value > 110; 
} 
+0

感谢您的有用信息。但似乎正则表达式不起作用。当我输入一个字母时,它会通过(并且它应该打印该信息)。我试图粘贴一些现成的数字正则表达式,但他们也失败了。什么会导致这个问题? – user3253748

+0

正则表达式的目的是什么?它应该只传递数字还是? –

+0

表单字段只能接受0-9的数字和数值范围0-110。如果用户输入字母或符号,它应该会提示消息(有效范围:从0到110) – user3253748