正则表达式仅允许1-20范围内的数字

时间:2012-08-29 17:17:00

标签: regex

我想让用户输入0-20范围内的数字,他们都可以输入01和1

这是我到目前为止所拥有的

 /^[1-9]|0[1-9]|1[0-9]|2[0]$/

但它不起作用。

3 个答案:

答案 0 :(得分:13)

问题是|的优先级低于^$,因此您的模式意味着^[1-9] 0[1-9] 1[0-9] 2[0]$^仅限制一位数字值,并且只限制20 $

您可以在交替的每个分支中重复^$,或者在(?:...)中包含替换以创建非捕获子表达式:

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

(我也冒昧地将[0]更改为0。)

答案 1 :(得分:7)

怎么样

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

问题是20是一个特例。第二部分介绍了它。第一部分介绍其余部分。我假设是perl风格的正则表达式,因为你没有指定上下文。

答案 2 :(得分:3)

试试这个

/^([01]?\d|20)$/

0或1(可选),后跟至少一个数字OR 20