Set minimum and maximum characters in a regular expression

Yes

Just like + means one or more you can use {3,30} to match between 3 and 30

For example [a-z]{3,30} matches between 3 and 30 lowercase alphabet letters

From the documentation of the Pattern class

X{n,m}    X, at least n but not more than m times

In your case, matching 3-30 letters followed by spaces could be accomplished with:

([a-zA-Z]\s){3,30}

If you require trailing whitespace, if you don’t you can use: (2-29 times letter+space, then letter)

([a-zA-Z]\s){2,29}[a-zA-Z]

If you’d like whitespaces to count as characters you need to divide that number by 2 to get

([a-zA-Z]\s){1,14}[a-zA-Z]

You can add \s? to that last one if the trailing whitespace is optional. These were all tested on RegexPlanet

If you’d like the entire string altogether to be between 3 and 30 characters you can use lookaheads adding (?=^.{3,30}$) at the beginning of the RegExp and removing the other size limitations

All that said, in all honestly I’d probably just test the String‘s .length property. It’s more readable.

Leave a Comment