2011-01-13 97 views
4

我想在JavaScript中使用正則表達式進行表單輸入驗證。 這些字符串不應該有<,>或我提到的任何特定的字符集。如果字符串沒有這些字符,測試應該通過。正則表達式中的否定

那麼如何在正則表達式中指定不要有char。

例子:

stringX = "vijay<>@$%_" 

我的目標是

  1. 字符串不應該有 '<', '>' 字符。
  2. 如果stringX沒有那些字符,測試應該返回true。

注:

我可以這樣做:

stringX = "vijay<>@$%_" 
regExp=/[<>`]/; 
if(!rexExp.test(stringX)) { 
    doSomthing() 
} 

,但我不希望這樣。

因爲我最終會遇到一些小麻煩。

我有一個通用的函數調用的validate()

function validate(stringX, regExp) 
{ 
    if(rexExp.test(stringX)) { // see there is no "!" in the condition. 
     return true; 
    } 
} 

比方說,我想驗證2串。

  1. 案例1:只有只有數字。我會使用regExp:/^[\ d] * $/
  2. 案例2:沒有 <,>。我會使用regExp:/^[<>`] * $ 因爲我不想指定所有允許的字符。我想指定不允許的字符 。

但我的驗證功能只適用於案例1. 正如情況2,我不會得到預期的結果。只有在字符串只有<,>,chars時,Validate()纔會使我真正。

+0

你做了什麼似乎很簡單。你不喜歡它什麼? – 2011-01-13 13:18:32

+0

我更新了我上面的問題。因爲我有一個通用的validate()函數,當時我正處於一種情況,我必須說否定。 – 2011-01-17 05:10:29

回答

5

如果你是好與幾乎任何其他字符字符串是,這將匹配不具有字符<所有字符串,>和`:

regexp=/[^<>`]*/; 

編輯:糾正表達與線開始/結束錨(感謝MizardX):

regexp=/^[^<>`]*$/; 
+2

將錨點`^`和`$`添加到它,它應該工作。沒有它們,它將始終與開始處的空子串匹配。 – 2011-01-13 14:20:33

0
stringX = "vijay<>@$%_" 
regEx=/[<>`]/g; 
stringX.replace(regEx, ''); 
4

你正在尋找的正則表達式是這樣的:

/^[^<>`]*$/ 

如果你這樣做是爲了確保人們不注入HTML標記的投入,忘記使用JavaScript作爲驗證。

它只會給你一種錯誤的安全感,不會阻止任何人濫用你的系統。

更好的方法是一個FO以下:

  • 條的charachters服務器端
  • HTML存儲它
  • 存儲輸入原樣之前編碼輸入服務器端,和HTML編碼它時,你輸出它

最後的解決方案是我通常喜歡的,因爲它是最靈活的,例如,如果用戶應該能夠稍後編輯原始輸入。

最後,在輸出它之前,總是使用htmlencode使用原始內容,否則你將會陷入困境:)