2012-12-19 207 views
26

我想驗證一個字符串,它只能包含字母數字和特殊字符&-._。爲此,我嘗試了一個正則表達式。在正則表達式中匹配特殊字符和字母

var pattern = /[a-zA-Z0-9&_\.-]/ 
var qry = 'abc&*'; 
if(qry.match(pattern)) { 
    alert('valid'); 
} 
else{ 
    alert('invalid'); 
} 

當使用上面的代碼,字符串abc&*是有效的。但我的要求是顯示這個無效。即當字母以外的字符,數字或特殊字符&-._出現時,字符串應評估爲無效。我如何用正則表達式來做到這一點?

+4

的關鍵是使用'^'開頭和'+ $'末,作爲答案下面已經解釋。 '/^[A-ZA-Z0-9&_ \ .-] + $ /'。如果你錯過了這個細微差別,我會指出這一點。 –

回答

42

將它們添加到允許的字符,但你需要逃避他們中的一些,比如 - ]/\

var pattern = /^[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/ 

這樣,你可以刪除你希望禁止任何個性。

此外,要包括起始和串地點標記的結束^和$

更新:

由於elclanrs瞭解(和我們其他人都沒有,開始)時,特殊字符需要在圖案被允許是& -._

/^[\w&.\-]+$/ 

[\ W]是與[A-ZA-Z0-9_]

雖然破折號在列表的開始或結束時並不需要轉義,但如果添加其他字符,我更喜歡這樣做。此外,+表示您至少需要列出的一個字符。如果零是確定的(即空值),然後用*代替替換:

/^[\w&.\-]*$/ 
+1

我建議任何允許所有這些特殊字符的列表都應該允許空格。 – Abacus

+0

加號(+)字符不適用於這個表達式 – calbertts

+0

@calbertts,你的意思是它包含在「var pattern ...」中的字符列表中嗎?你使用哪種語言? JavaScript的? –

16

那麼,爲什麼不把它們添加到你現有的角色類?

var pattern = /[a-zA-Z0-9&._-]/ 

如果你需要檢查字符串是否包含什麼,但你有這些字符的表達以及:

var pattern = /^[a-zA-Z0-9&._-]+$/ 

增加的^$比賽的開始和結束字符串分別。

測試字母,數字或下劃線可以\w做既縮短你的表達:

var pattern = /^[\w&.-]+$/ 

以上,在彌敦道的評論中提到,如果你不使用從.match()結果(它返回一個什麼已經匹配陣列),最好使用RegExp.test()它返回一個簡單的布爾:

if (pattern.test(qry)) { 
    // qry is non-empty and only contains letters, numbers or special characters. 
} 

更新2

如果我誤解了問題,下面將檢查是否滿足所有三個單獨的條件。

if (/[a-zA-Z]/.test(qry) && /[0-9]/.test(qry) && /[&._-]/.test(qry)) { 
    // qry contains at least one letter, one number and one special character 
} 
+3

+1。可能值得一提的是使用'test'而不是'match',因爲你並不需要找到匹配。這可能有助於提高性能和可讀性,並可能有助於提問者學習新東西。 –

+1

另外,'i'後面沒有斜線。 '/ [a-z]/i /'應該是'/ [a-z]/i'。 –

9

試試這個正則表達式:

/^[\w&.-]+$/ 

您也可以使用test

if (pattern.test(qry)) { 
    // valid 
} 
0

試試這個正則表達式:匹配我們在段落使用特殊charecters和字母

Javascript : /^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$/.test(str) 

       .test(str) returns boolean value if matched true and not matched false 

      c# : ^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$ 
相關問題