Sure you could; the more important question is should you. You're probably better off implementing a "lower level" check (is this a 4 digit number) at the regex level and then using comparisons in code to check range membership.
What you want to be worried about is when your requirements shift and now you've got to check if it's between 3021 and 5123 for the comparisons-in-code version it's just a matter of changing two numbers (or redefining FOO_RANGE_MIN and FOO_RANGE_MAX constants since one would never use magic numbers inline, of course :) rather than coming up with a new clever regex to match the new rage.
Update: Just to show it can be done (but again, probably shouldn't): /^ 3 (?: 0 [1-9] \d | [1-9] \d \d ) | 4 (?: 0 \d \d | 1 (?: [01] \d | 2 [0123] ) ) $/x
| [reply] [d/l] [select] |
As I pointed out, the reason for doing this is off-topic, let's just say I need a regex that ensures a value is between A and B, where A and B are defined elsewhere (in this case, it's an installer that supports Perl regexes, and I want to check that the port number entered by the user is within an allowable range. Hence the reason I can't post-process the value, I need a regex that does it in one step).
Ideally, I wanted to be able to pass A and B to the regex, in a way similar to defining {min, max} for the number of characters to match.
I want to avoid the breaking down of the min and max values into a sequence of ranges, for exactly the reason you point out.
I still think it is a reasonable question ....
| [reply] |