Set minimum and maximum characters in a regular expression

后端 未结 4 1398
失恋的感觉
失恋的感觉 2020-12-01 14:25

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 enfo

4条回答
  •  余生分开走
    2020-12-01 14:39

    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.

提交回复
热议问题