Regex for number check below a value
I'm sti开发者_如何学JAVAll a beginner at regex so this is a little above me currently.
I need to validate a number input to two characters and it can't be more than the value 12.
The two numbers easy:
/^\d{1,2}$/
Then check that if there are two numbers then the first must be either 0 or 1, and the second must be either 0, 1, or 2. That part I don't know how to express, regularly...
And also if possible I would like to have it in single regex statement.
Any help appreciated.
Regex is not suited to dealing with ranges like this, but anyway this should work:
/^(0?[1-9]|1[012])$/
Description:
^ match start of the string
(0? optional zero
[1-9] any number between 1 and 9
|1[012]) or match 1 followed by either a 0, 1, 2 i.e. 10, 11, 12.
$ match end of string
For something like this (testing if an integer is less than a given value), you should really not use a regex.
Instead, just use a simple condition like this one (the syntax will depend on the language you're working with) :
if ($variable <= 12) {
// OK
}
else {
// Not OK
}
For the "character either x, or y, or z, or ...", there's the character class, expressed in square brackets:
[012]
means "any character of 0
,1
, or 2
".
(0[0-9])|(1[0-2])
this matches a zero, followed by one arbitrary digit, or a one, followed by 0, 1 or 2
0[0-9]|1[0-2]
Description:
[0-9] : number between 00 and 09
| : or
1[0-2] : and if starting with 1, next number should be between 0 -1 (testing 10-12)
The following code (Groovy) creates a regex similar to the answer from @Gery Green but works for any given number:
String getSmallerNumberRegEx(String number) {
int length = number.length()
List<String> patterns = [];
if (length >= 2) {
patterns.add("\\d{1,${length - 1}}") // any number with less digits
}
for (int i = 0; i < number.length(); i++) {
def digit = number[i].toInteger()
if (digit > 0) {
// same prefix + smaller number + any postfix:
patterns.add("${number.substring(0, i)}[0-${digit - 1}]\\d{${length - i - 1}}")
}
}
return patterns.join('|')
}
精彩评论