我想让用户输入 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