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

Gol*_*ern 9 regex

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

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

 /^[1-9]|0[1-9]|1[0-9]|2[0]$/
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

rua*_*akh 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)$/
Run Code Online (Sandbox Code Playgroud)

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


小智 8

怎么样

/^([0-1]?[0-9]|20)$/
Run Code Online (Sandbox Code Playgroud)

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