2017-08-29 52 views
1

我有KeyEvent.KEY_TYPED上,我執行我的輸入檢查,在此期間,我得到全文:正則表達式確認可接受的輸入

text = text + event.getCharacter(); 

但我要確保我只添加接受字符用戶可以輸入,其中包括所有數字,字母和特殊字符。已經應用程序應該支持英語,愛沙尼亞語和俄語,未來還會增加更多內容。 regex應該排除什麼樣的Esc,Backspace等?

+0

你想允許不控制字符任何字符?使用'「\\ P {Cc}」'匹配這樣的字符(或'「\\ P {Cntrl}」')。 –

+0

謝謝你Wiktor,那正是我正在尋找的。也許你可以將它發佈爲答案,以便我可以將其標記爲正確? – Alyona

+0

好的,我發佈了一個答案。 –

回答

1

爲了配合比控制字符以外的任何字符,你可以使用

"\\P{Cc}" 

"\\P{Cntrl}" 
1

KEY_TYPED只是關於視覺上顯示爲輸入的鍵(因此鍵鍵入)。要按下(並禁止)按下控制鍵(如退格鍵),您應該查看其他事件,例如keyPressed和keyReleased。他們也收到控制字符的通知。

KeyEvent javadoc

「鍵入鍵」事件是較高層次,一般不依賴於 平臺或鍵盤佈局。它們是在輸入Unicode 字符時生成的,並且是查找有關 字符輸入的首選方式。在最簡單的情況下,通過單鍵按壓(例如,'a')產生鍵輸入事件 。然而,通常情況下,通過一系列按鍵(例如'shift'+'a')產生的字符是 ,並且從按鍵事件到按鍵類型事件的映射可以是多對一的或多對多的,許多。密鑰版本通常不是生成密鑰類型事件所必需的,但有些情況下密鑰類型事件是 ,直到密鑰被釋放(例如,通過Windows中的Alt-Numpad方法輸入ASCII序列 )纔會生成。 對於不生成Unicode字符的鍵(例如, 操作鍵,修飾鍵等),不生成鍵類型事件 。

但是,從用戶的角度來看,不允許例如退格鍵聽起來有問題。如果你想要走這條路線,那就要小心你已經想到了所有相關的使用場景。由於鍵入事件沒有得到任何控制字符,可能它已經在做你想做的事情。