2012-08-28 42 views
2

我對Javascript中的正則表達式相當陌生,我試圖做和看起來不那麼簡單的事情。基本上,我需要評估一個字符串是否滿足2個正則表達式條件之一。基本上,一個輸入字符串可以有兩種形式中的一種,其中任何一種都是有效的,其他任何東西都是無效的。Javascript - 在同一行上評估多個正則表達式

所以說我有2個正則表達式:a= ^[0-9]\d{3}$b= ^1-\d{5}並希望在繼續之前查看輸入字符串是否匹配。我想要做的是這樣的:

If((!a.test(input)) || (!b.test(input))) 
{ 
    alert("Invalid ID"); 
} 

我也嘗試過使用「|」運營商:

if((!a|!b.test(input))) 

但到目前爲止沒有任何工作。通常我會得到聲明來驗證1或者沒有一個,但從來都沒有。我不確定我在這裏做錯了什麼。

謝謝!

+0

請注意'[0-9]'只是'\ d'。 – pimvdb

回答

7

我認爲你的布爾邏輯是錯誤的。匹配一個或繼續之前其他的,失敗的情況是,當它不符合這兩個測試是這樣的:

if(!a.test(input) && !b.test(input)) 
{ 
    alert("Invalid ID"); 
} 

而且,你Ifif以小寫i和我刪除不必要的水平括號使它更容易閱讀。

你也可以兩者的正則表達式組合成一個,並在一次測試:

var re = /^[0-9]\d{3}$|^1-\d{5}/; 

if (!re.test(input)) { 
    alert("Invalid ID"); 
} 

而且,你不顯示真正的代碼,不過正則表達式不聲明你如何讓他們在你的問題。也許這是你他們是如何被複制的問題,但他們使用的/regex here/語法具體做法是:

var a = /^[0-9]\d{3}$/; 
var b = /^1-\d{5}/; 

注:關於第二個正則表達式,你打算爲它在像到底有$第一?

+0

好的,我不知道我在做什麼錯,但我發誓我已經嘗試了你上面發佈的內容,但沒有奏效。我刪除了代碼塊,重新輸入它,現在它似乎工作。我必須頭腦發熱,比如忘記「!」在其中一個表達式之前。大腦有時是可怕的事情。謝謝! – ewomack

0

我會做這樣的:

if (!input.match(/^(\d{4}|1-\d{5})$/)) { 
    alert('Invalid ID'); 
} 

請注意,我用\d代替[0-9],這是一樣的。

相關問題