2015-08-28 27 views
4

試圖匹配字符串中只有字符串長度爲10-30個字符且只有a-z和0-9(但不僅是數字)的字符串。似乎工作除了字符串以數字開頭,然後失敗。 不知道的\ d應該修復不僅數字REGEX a-z 0-9但不只是數字

static final Pattern UNIQUE_ID_PATTERN = Pattern.compile("^\\D[A-Za-z0-9_-]{10,30}$"); 
UNIQUE_ID_PATTERN.matcher("1eeeeeeeee333e").matches(); // Does not work 
UNIQUE_ID_PATTERN.matcher("eeeeeeeee333e").matches(); // Works 

回答

9

\D速記類指any non-digit symbol。你應該從的模式中刪除它("^[A-Za-z0-9_-]{10,30}$"),以使matches返回true,因爲11eeeeeeeee333e中的數字。

如果你想放置的限制(串不能只包含數字)使用錨定前瞻:

^(?![0-9]+$)[A-Za-z0-9_-]{10,30}$ 

這裏是a demo

或者縮短版本i修改製作該圖案不區分大小寫:

(?i)^(?![0-9]+$)[A-Z0-9_-]{10,30}$ 
+0

我的答案更新了版本,不允許位,僅字符串。 –

+0

不錯。 +1爲負面展望。 – prakharsingh95

+1

這正是我需要的感謝。將時間限制後標記爲接受的答案。 – jalmen

1

的另一種方法:^(?=(?:.*[a-zA-Z])+)([a-zA-Z\d]{10,30})$更新

Demo

More details

+0

這不是JavaScript,請查看帖子標籤。在Java中,不能像在JavaScript或PHP中那樣使用正則表達式分隔符。 –

+0

@stribizhev謝謝,我明白了。 –

相關問題