12

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

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

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

但它不起作用。

4

3 回答 3

16

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

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

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

(我也冒昧地更改[0]0.)

于 2012-08-29T17:30:21.247 回答
9

怎么样

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

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

于 2012-08-29T17:28:30.017 回答
4

试试这个

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

0 或 1(可选)后跟至少一位数字或 20

于 2012-08-29T17:19:24.453 回答