I'm using Java regex to validate an username. They have to meet the following constraints:
Username can contain alphanumeric characters and/or underscore(_).
Username can not start with a numeric character.
8 ≤ |Username| ≤ 30
I ended up with the following regex:
String regex="^([A-Za-z_][A-Za-z0-9_]*){8,30}$";
The problem is that usernames with length > 30 aren't prevented although the one with length < 8 are prevented. What is the wrong with my regex?
You can use:
String pattern = "^[A-Za-z_][A-Za-z0-9_]{7,29}$";
^[A-Za-z_]
ensures input starts with an alphabet or underscore and then [A-Za-z0-9_]{7,29}$
makes sure there are 7 to 29 of word characters in the end making total length 8
to 30
.
Or you can shorten it to:
String pattern = "^[A-Za-z_]\\w{7,29}$";
You regex is trying to match 8 to 30 instances of ([A-Za-z_][A-Za-z0-9_]*)
which means start with an alphabet or underscore followed by a word char of any length.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With