Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Regex validate username length

Tags:

java

regex

I'm using Java regex to validate an username. They have to meet the following constraints:

  1. Username can contain alphanumeric characters and/or underscore(_).

  2. Username can not start with a numeric character.

  3. 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?

like image 708
Eslam Mohamed Mohamed Avatar asked Oct 19 '15 07:10

Eslam Mohamed Mohamed


1 Answers

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.

like image 137
anubhava Avatar answered Oct 20 '22 14:10

anubhava