Set minimum and maximum characters in a regular expression
java, regex
Solution
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.
Problem
I've written a regular expression that matches any number of letters with any number of single spaces between the letters. I would like that regular expression to also enforce a minimum and maximum number of characters, but I'm not sure how to do that (or if it's possible). My regular expression is: ``` [A-Za-z](\s?[A-Za-z])+ ``` I realized it was only matching two sets of letters surrounding a single space, so I modified it slightly to fix that. The original question is still the same though. Is there a way to enforce a minimum of three characters and a maximum of 30?