非重复字符正则表达式

Pet*_*teB 1 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 | ...)",我该如何实现这一目标?

xan*_*tos 8

^1?2?3?4?5?6?7?8?9?$
Run Code Online (Sandbox Code Playgroud)

这个?

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

如果您想要一个数字,请使用前瞻

^(?=[1-9])1?2?3?4?5?6?7?8?9?$
Run Code Online (Sandbox Code Playgroud)

或者看后面

^1?2?3?4?5?6?7?8?9?(?<=[1-9])$
Run Code Online (Sandbox Code Playgroud)

或负向前看

^(?!$)1?2?3?4?5?6?7?8?9?$
Run Code Online (Sandbox Code Playgroud)

或负面看后面

^1?2?3?4?5?6?7?8?9?(?<!^)$
Run Code Online (Sandbox Code Playgroud)

所以至少需要一个数字

如果您的正则表达式语言没有预见(并且看后面),您可以:

^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)$
Run Code Online (Sandbox Code Playgroud)

现在,第一个数字"分支"到以下可选数字的"有效"组合.