Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
354 views
in Technique[技术] by (71.8m points)

java - Set minimum and maximum characters in a regular expression

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...