2013-04-19 40 views
4

我需要確保給定的字符串不是「選擇一個值」。就是這樣,除了這個確切的字符串外,其他任何東西都應該匹配模式。除了給定的字符串,JavaScript模式匹配什麼?

我一直在環顧四周,嘗試http://www.regular-expressions.info/javascriptexample.html上的很多組合,但似乎沒有任何關鍵。

我不能否定測試,模式需要做到這一切,因爲我將它饋送到表單驗證框架。如果選擇包含這樣的文字,我會返回一個錯誤,等等。所以這個模式必須別的匹配,除了這個確切的字符串,

我嘗試很多東西, (?!選擇一個帳戶) !(選擇一個帳戶) !(^(選擇一個帳戶)$)

etc ...顯然我不明白這些機制的一些如何工作。我得到了「開始」和「結束」,但我似乎沒有找到一個簡單的否定運算符。

由於某種原因,我尋找正則表達式的解釋我沒有得到這個簡單的用例,也許這不是普通

我怎樣才能做到這一點

謝謝

回答

10

我相信這是問類似的話:

Regular Expressions and negating a whole character group

在你的情況,你可以使用類似

^(?!Select a value).*$ 

這將匹配一切不以啓動「選擇一個值。 「

+0

太棒了!我知道我很接近,但無法弄清楚什麼是缺少的...... * $做的竅門!謝謝!! –

2

而是想着負正則表達式的,做一個積極的和否定條件:?!

if (! /^Select an account$/.test(mystring)) { 
    // String is not "Select an account" 
} 

但你並不需要的正則表達式這個反正:

if (mystring != 'Select an account') { 
    // String is not "Select an account" 
} 

或者,如果你想「載」:

if (mystring.indexOf('Select an account') == -1) { 
    // String does not contain "Select an account" 
} 
+0

哦,就像我說的我不能使用它。我會將正則表達式模式提供給表單驗證框架,所以我不能否定測試或做明顯的事情。我實際上不會執行測試......只需要一個簡單的正則表達式,它將匹配給定的字符串,而不是其他任何東西。有一種方法可以做到這一點...... –

0

我可能無法正確理解這一點。這不工作嗎?

if (string != "Select a value") { 
    //code here 
} 

我不知道你爲什麼會需要正則表達式來做到這一點,這就是爲什麼我怕我會不理解你的問題是什麼。

+0

哦,謝謝Vijay,我得到了上面的答案,但是我不能這麼做的原因是因爲我會將正則表達式模式提供給一個表單驗證框架,它需要一個正則表達式輸入。我不會讓這個檢查自己不想對框架代碼進行調整。 –

0

另外一個解決辦法,如果你使用正則表達式中的HTML5表單驗證處理和你輸入的pattern屬性比一個精確的字符串比較複雜,是如下(JavaScript的):

function findAllNotPattern(inputField) { 
    var allBut1 = inputField.getAttribute("pattern") 
    var allBut2 = allBut1.slice(0, 1) + "^" + allBut1.slice(1) 
    var allButRe = new RegExp(allBut2, "g") 
    return allButRe 
} 

,如果你想要在純javascript中運行它,你可以使用:

findAllNotPattern(document.getElementById("inputFieldId"))