2011-02-07 88 views
36

我正在使用正則表達式來編寫一個文本框的輸入驗證器,我只需要字母字符。我想知道[A-z][a-zA-Z]是否相當,或者如果在性能方面有差異。正則表達式[A-Z]和[a-zA-Z]之間的區別

我一直在閱讀我的搜索[a-zA-Z],沒有提及[A-z]。我正在使用java的String.matches(regex)

回答

53

[A-z]將在範圍匹配的ASCII字符從Az,而[a-zA-Z]將在範圍中的範圍匹配的ASCII字符從AZaz。乍一看,這看起來可能是等價的 - 但是,如果您查看ASCII字符的this table,則會看到A-z包含其他幾個字符。具體來說,它們是[,\,],^,_和```(你顯然不想要)。

+6

我想我真的不知道,如果有Z-之間的字符。 – Eric 2011-02-07 16:00:17

8

看看ASCII table。你會看到Za之間有一些字符,所以你會比你更喜歡的匹配。

9

az匹配'a'到'z'AZ匹配'A'到'Z'Az匹配所有這些以及'Z'和'a'之間的字符,它們是[] ^/_`

參見http://www.asciitable.com/

6

方括號創建一個字符類和連字符是用於將提供的兩個字符之間的每個字符的簡寫。即[A-F]可以寫成[ABCDEF]

字符類[A-z]將匹配這些字符之間的每個字符,這些字符在ASCII中包含一些其他字符,如'[',''和']'。

指定兩種情況的替代方法是使用/i修飾符將正則表達式設置爲不區分大小寫。

3

看一看的ASCII chart(其中Java的字符是基於):有相當位於Z之間的幾個標點字符和,即這些:

[\]^ _` 
6

當你看一看的ASCII表,你會看到以下內容:

A = 65 
Z = 90 
a = 97 
z = 122 

所以,[A-z]將從65每字符匹配122這包括這些字符(91 -> 97)以及:

[\]^_` 

這意味着[A-Za-z]只會匹配的字母,而不會受人注目的字符

相關問題