2011-10-25 81 views
1

同事使用使用正则表达式验证数据输入字段的应用程序。非重复字符正则表达式

他需要允许用户从数字1-9中进行选择。

即1,2,3,...,12,13,...,23,24,...,...,123456789

明显的基本[1-9] {1 ,9}不会禁止重复数字或强制执行数字顺序。

数字不能重复(不允许11,343等),它们必须按数字顺序(不允许21,164等)。

单独匹配320种可能性的缺点“(1 | 2 | 3 | ... | 12 | 13 | ...)”,我该怎么做到这一点?

回答

8
^1?2?3?4?5?6?7?8?9?$ 

这一个?

显然,用户最多可以插入9位数字(123456789),他可以从任何一个开始。任何数字都是可选的,但订单是固定的。

如果你想有一个数字是必要的,使用前瞻

^(?=[1-9])1?2?3?4?5?6?7?8?9?$ 

或向后看

^1?2?3?4?5?6?7?8?9?(?<=[1-9])$ 

或提前

^(?!$)1?2?3?4?5?6?7?8?9?$ 

或后面

负外观负的样子
^1?2?3?4?5?6?7?8?9?(?<!^)$ 

所以至少一个数字是必要

如果您正则表达式语言没有看aheads(看看屁股),你可以这样做:

^12?3?4?5?6?7?8?9?|23?4?5?6?7?8?9?|34?5?6?7?8?9?|45?6?7?8?9?|56?7?8?9?|67?8?9?|78?9?|89?|9)$ 

现在,第一个数字“分支”的以下可选数字的“有效”组合。

+0

这不是太简陋,除非它匹配'“”':-)这可以通过'length> 0'约束来解决。 – paxdiablo

+0

@paxdiablo我已经添加变种 – xanatos

+0

+1很好和短的解决方案! – hochl