我想让用户输入0-20范围内的数字,他们都可以输入01和1
这是我到目前为止所拥有的
/^[1-9]|0[1-9]|1[0-9]|2[0]$/
但它不起作用。
答案 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