2014-02-06 46 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