2012-12-18 68 views
1

我正在做的事情:這個正則表達式應該強制第一個字符是一個字母,之後可以插入字符,字母,空格或' - '。正則表達式:將語句與空字符串結合

這第一部分工作得很好:(^[A-Za-z][A-Za-z -]*$)

然後我想允許空字符串,以及:(^$)

當我結合然而這兩種,用戶可以開始與一個空白的字符串。我在這裏做錯了什麼? Thanx!

(^[A-Za-z][A-Za-z -]*$)||(^$)

(我不知道如果需要此信息,但我用這個在Java中,作爲從InputVerifier擴展一個類,以設置JTextField的驗證程序的一部分)

回答

3

下應該這樣做:

^([A-Za-z][A-Za-z -]*)?$ 

?使得可選的括號內的表達。

你的原始正則表達式不完全正確的原因是||。正則表達式「或」運算符是單個|。現在考慮x||y。這匹配x一個空字符串y。由於空字符串沒有以任何方式錨定,所以Pattern.find()將在任何輸入中找到它的至少一個實例。

+0

遠遠好一點。 +1 :) –

+0

我不明白你最後的聲明。你的意思是說: - 'x || y'甚至會匹配一個'空白',實際上是任何輸入? –

+0

,但即使使用此模式,我也可以從空字符開始。 也許這與Swing中的InputVerifier的工作方式有關? – Rps

4

這應該滿足您的需求:

^([A-Za-z][A-Za-z -]*|)$ 

OR正則表達式中只需要一個|,而經典的JAVA一個(其它之中語言)需要兩個||

+0

啊!沒有看到這件事。 +1;) –

+0

@ Bohemian Yep,嘗試'「」.matches(「^([A-Za-z] [A-Za-z - ] * |)$」)',它返回'true'。 – sp00m

+0

@Bohemian ..它確實如此。 –

相關問題