首先,你需要.*
您先行條款內,使這些字符是在匹配的字符串的任何位置。沒有這些 - 所有這些角色都必須在你的字符串開頭。第二,你需要實際上有一個捕獲子句,否則你會得到一個空匹配 - 這將被視爲無效(爲什麼?見下文)。所以
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]*
會給你匹配密碼的全部。你也可以在這裏查看密碼長度 -
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{8,}
會使密碼長度大於8個字符。
至於爲什麼你需要通過正則表達式捕獲的值時,RegexValidationAttribute
的IsValid(object value)
方法使用以下邏輯語句返回如果輸入的值根據正則表達式是有效的。 (其中m
是從給定的值給定模式的Match
和stringValue
爲給定值)
return (m.Success && m.Index == 0 && m.Length == stringValue.Length);
View the source yourself
考慮,如果你具有.{3,8}
的驗證正則表達式 - 這意味着三年之間的任何字符串八個字符的長度。您嘗試驗證值123456789
。正則表達式匹配這個字符串! 12345678
長度在三到八個字符之間!其實,23456789
也是。和123
,就此而言。只檢查比賽是不夠的,你必須進一步檢查整個值是否匹配。
謝謝你的字符串長度提示呢! – erdinger
樂意幫忙。如果不明確,該正則表達式的[A-Za-z0-9]部分假定這些是您的密碼數據唯一有效的字符集。你可能需要適當調整它,或者將它改爲'。{8,}',讓它接受任何長度爲8+的字符(仍然是三個前提條件匹配的地方)。 –