Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regular expression for DataAnnotation for Password

We have a requirement to make sure password conforms to the specific strength format (this is configured in web.config). Requirements are that password must contain certain number of capital characters and certain number of non-alphanumeric characters. I want to annotate my Password property with regular expression that validates password to make sure password contains x number of CAPS and y number of non-alpha chars. Please help with regular expression.

like image 370
fenix2222 Avatar asked Dec 07 '25 13:12

fenix2222


1 Answers

Checking multiple conditions like this in a single regex is best accomplished using lookaheads, for example say you want 3 capital characters and 4 non-alpha characters, you could use the following regex:

^(?=(?:.*[A-Z]){3})(?=(?:.*[^a-zA-Z]){4})

Explanation: first, lets think about what a regex would look like that only checks the first condition. To match 3 uppercase characters we can use the following:

(?:.*[A-Z]){3}

We can still check this condition by dropping it inside of a lookahead, which is what the (?=...) does, so now (?=(?:.*[A-Z]){3}) checks this condition without consuming any characters. At this point we can check the second condition using (?:.*[^a-zA-Z]){4}. I put this second condition inside of a lookahead as well so that adding more checks is straightforward.

Note that the current regex won't actually match any characters, it will match the beginning of the string (zero characters) if all conditions match, otherwise the match will fail. If you want it to actually consume characters as well, just add .* to the end.

like image 180
Andrew Clark Avatar answered Dec 10 '25 02:12

Andrew Clark



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!