2012-08-29 45 views

回答

8

问题是|具有比^$的优先级低,所以你的图案意味着^[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。)

+0

它帮助我今天...谢谢:) – AbdulAziz

+0

@AbdulAziz:不客气! :-) – ruakh

3

试试这个

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

0或后面至少一个数字1(另购)或20

+0

这将允许00.应该禁止吗? –

+1

如果00不被允许/ ^(0 [1-9] | 1 \ d | 20)$/ –

+0

感谢它现在的作品。 –

6

如何

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

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

+0

你能告诉我我的代码有什么问题吗?我今天早上自己学了一个正则表达式。 –

+1

正如ruakh在他的回答中指出的那样,这是一个优先事项 - 为了确保'^'和'$'符号的优先级低于表达式的其余部分,您需要将块加括号。 –

相关问题