2010-07-19 43 views
2

我有這個表達式([a-zA-Z]|ñ|Ñ)*,我想用它來阻止所有字符,但字母和Ñ被輸入到文本框。 問題是返回一個匹配:A9023,但也是32「」「。我怎樣才能返回匹配的A9023但不是32」「」。 謝謝。正則表達式來測試整個單詞

回答

0

確保您並不意味着^([a-zA-Z]|ñ|Ñ)*$ - 你可能會找到你想要的字符,但不排除你做什麼呢?我提到的表達式將固定在字符串的開始^和結尾$,以便其他內容都不會通過。否則:

123ABC456 

...將通過您的匹配,因爲它發現0或更多的字母......雖然也有其他字母。

5

您需要添加斷言來開始和字符串的結尾:

^([a-zA-Z]|ñ|Ñ)*$ 

否則正則表達式中的任何位置匹配。此外,你也可以寫([a-zA-Z]|ñ|Ñ)*作爲字符類[a-zA-ZñÑ]*

^[a-zA-ZñÑ]*$ 
+0

另外,Expresso是測試正則表達式的好工具... http://www.ultrapico.com/Expresso.htm – 2010-07-19 17:17:33

0

你沒有說你使用的正則表達式的味道(這編程語言),但你可能要考慮兩種

^\p{L}*$ 

如果您正則表達式的味道支持Unicode屬性或

^[^\W\d_]*$ 

,如果它不。

原因:你的正則表達式只允許不帶重音的字母和Ñ - 是否有一種真正的語言使用後者,但沒有重音字母?

\p{L}手段「任何‘語言’的任何字母」,

[^\W\d_]的意思是「這是任何字符既不是一個非字母,數字或下劃線」,這僅僅是一個幻想,但說的必要途徑「任何字母」(\w是「字母,數字或下劃線」的簡寫,\W是相反的)。