2017-08-12 29 views
3

我在Java中,以下的正則表達式,用於與用戶名匹配:正則表達式不尊重長度限制

^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9]){8,15}$ 

我希望這個正則表達式匹配包含所有字母數字字符串(開頭字母)與允許在中間和大小至多一個週期(點)8和15

因此之間,它有兩個問題:

  1. 它不接受長度8的字符串它接受串與迷你媽媽的長度爲9.
  2. 長度沒有上限。它匹配任何長度超過8個字符的字符串。

爲什麼不考慮{8,15}

+0

請舉幾個例子來接受 –

+1

你應該將其添加爲一個答案@bobblebubble –

回答

1

第1期:您正在對至少需要一個[A-Za-z0-9]的組進行量化,並且之前使用了至少一個[A-Za-z0-9.]。因此已經需要至少8個字符。加上你的正則表達式在這個構造之前需要一個[A-Za-z] =至少9個字符。

問題2:你是量化包含[A-Za-z0-9.]*任何金額一組,將該{8,15}因此,上限是15倍(任何金額)=∞

猜你會之後類似於此的正則表達式之一:

^(?![^.]*\\.[^.]*\\.)[A-Za-z](?:\\.?[A-Za-z0-9]){7,14}$ 

See demo and more explanation at regex101