我想让用户输入 0-20 范围内的数字,他们都可以输入 01 和 1
这就是我到目前为止所拥有的
/^[1-9]|0[1-9]|1[0-9]|2[0]$/
但它不起作用。
问题在于它|
的优先级低于^
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
.)
怎么样
/^([0-1]?[0-9]|20)$/
问题是 20 是一个特例。第二部分涵盖了它。第一部分涵盖其余部分。我假设 perl 风格的正则表达式,因为你没有指定上下文。
试试这个
/^([01]?\d|20)$/
0 或 1(可选)后跟至少一位数字或 20