非重复字符正则表达式

时间:2011-10-25 08:54:18

标签: regex regex-negation

一位同事使用一个使用正则表达式验证数据输入字段的应用程序。

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

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

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

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

没有单独匹配320种可能性“(1 | 2 | 3 | ... | 12 | 13 | ...)”,我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分: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?(?<!^)$

所以至少需要一个数字

如果您的正则表达式语言没有展望(并且看后面),您可以这样做:

^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)$

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