正则数字检查低于一个值

时间:2011-04-13 10:38:54

标签: regex

我仍然是正则表达式的初学者,所以这比我目前还要高一点。

我需要验证两个字符的数字输入,并且它不能超过值12。

这两个数字很简单:

/^\d{1,2}$/

然后检查是否有两个数字,那么第一个必须是0或1,第二个必须是0,1或2。 那部分我不知道如何定期表达......

如果可能的话,我想在单一的正则表达式声明中使用它。

任何帮助表示赞赏。

6 个答案:

答案 0 :(得分:14)

正则表达式不适合处理这样的范围,但无论如何这应该有效:

/^(0?[1-9]|1[012])$/

说明

^       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

答案 1 :(得分:1)

对于像这样的东西(测试整数是否小于给定值),你真的不应该使用正则表达式。

相反,只需使用像这样的简单条件(语法将取决于您正在使用的语言)

if ($variable <= 12) {
  // OK
}
else {
  // Not OK
}

答案 2 :(得分:0)

对于“字符x,或y,或z,或......”,有字符类,用方括号表示:

[012]

表示“012”的任何字符。

答案 3 :(得分:0)

(0[0-9])|(1[0-2])

这匹配零,后跟一个任意数字,或一个,后跟0,1或2

答案 4 :(得分:0)

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)

答案 5 :(得分:0)

以下代码(Groovy)创建了一个与@Gery Green答案相似的正则表达式,但适用于给定编号的 any

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('|')
}