2011-10-19 132 views
1

正則表達式僅允許字母和數字和空格在字母之間,最大大小爲。不允許空格開頭的正則表達式

([a-zA-Z0-9]+([\\s][a-zA-Z0-9]+)*){0,20}

這不允許在開始時使用空格,但它不會檢查最大尺寸條件。我怎樣才能改變這個正則表達式?

+2

對於它應該匹配的內容以及它不應該匹配的內容的幾個例子來說,這會很好。 – aioobe

回答

5

您正在指定整個模式的20次重複。我猜你可能意味着像

[a-zA-Z0-9][\\sa-zA-Z0-9]{0,19} 

如果空的輸入應該被允許,包裝在(...)?整個事情。

+0

這個正則表達式是否允許空串[a-zA-Z0-9] {0,1} [\\ sa-zA-Z0-9] {0,19} – user679526

+0

不會,也就是說,它會允許空輸入,但也消除了第一個字符必須是非空白的限制。就像我在答案中已經解釋的那樣,做到這一點的方法是'([a-zA-Z0-9] [\\ sa-zA-Z0-9] {0,19})?'。問號是編寫'{0,1}'的更緊湊和習慣的wsy。 – tripleee

0

的正則表達式如下:

boolean foundMatch = subjectString.matches("(?i)^(?=.{1,20}$)[a-z0-9]+(?:\\s[a-z0-9]+)*$"); 

將匹配1〜20個字符開始以字母數字字符,然後由單個空間和更多的字母數字字符的字符串。請注意,該字符串必須以字母數字字符而不是空格結尾。

3

所有類型的書寫方式,既然你使用Java,爲什麼不使用Java正則表達式「特性」? :d

String regexString = "(?<!\\s+)[\\w\\s&&[^_]]{0,20}"; 

看,此說:

(?<!\\s+) # not following one or more whitespace characters, 
[   # match one of the following: 
    \\w  # word character (`a-z`, `A-Z`, `0-9`, and `_`) 
    \\s  # whitespace characters 
    &&[^_] # EXCEPT FOR `_` 
]   # 
{0,20}  # between 0 and 20 times 

它將匹配a-zA-Z0-9,和白色的空間,即使\ W否則將包括下劃線,多餘的部分有說不強調 - 我認爲它對Java來說是獨一無二的......無論如何,這很有趣!

相關問題