我仍然是正则表达式的初学者,所以这比我目前还要高一点。
我需要验证两个字符的数字输入,并且它不能超过值12。
这两个数字很简单:
/^\d{1,2}$/
然后检查是否有两个数字,那么第一个必须是0或1,第二个必须是0,1或2。 那部分我不知道如何定期表达......
如果可能的话,我想在单一的正则表达式声明中使用它。
任何帮助表示赞赏。
答案 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]
表示“0
,1
或2
”的任何字符。
答案 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('|')
}