Regex 非重复字符正则表达式

Regex 非重复字符正则表达式,regex,regex-negation,Regex,Regex Negation,同事使用一个使用正则表达式验证数据输入字段的应用程序 他需要允许用户从数字1-9中进行选择 i、 e.1、2、3、…、12、13、…、23、24、…、123456789 显而易见的基本[1-9]{1,9}不会禁止重复数字或强制执行数字顺序 数字不能重复(不允许11、343等),且必须按数字顺序排列(不允许21、164等) 如果不分别匹配320种可能性”(1 | 2 | 3 |……| 12 | 13 |……),我如何实现这一点 ^1?2?3?4?5?6?7?8?9?$ 这个 显然,用户最多可以插

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

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

i、 e.1、2、3、…、12、13、…、23、24、…、123456789

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

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

如果不分别匹配320种可能性”(1 | 2 | 3 |……| 12 | 13 |……),我如何实现这一点

^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?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?(?<=[1-9])$
^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?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?(?<=[1-9])$
^1?2?3?4?5?6?7?8?9?(?<!^)$

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

这并不太糟糕,只是它与
“”
:-)匹配,可以用
长度>0
约束进行修复。好的,我给你+1,然后:-)虽然这是一个简单的修复操作,但你可能想去掉零(因为Q表示数字1到9)。答案很好@xanatos,很明显现在我看到了!我发现每个数字都有一个可选的后缀a-d,所以我建议
^(1 | 1a | 1b | 1c | 1d)?(2 | 2a | 2b | 2c | 2d)?(3…9d)?$
这只是有待观察应用程序的正则表达式引擎是否支持它…谢谢这不是太破旧,只是它匹配了
“”
:-)可以用
长度>0
约束来修复。好的,我会给你+1,然后:-)虽然这是一个简单的修复操作,你可能想摆脱零(因为Q要求数字1到9)。答案很好@xanatos,很明显现在我看到了!我发现每个数字都有一个可选的a-d后缀,所以我建议
^(1 | 1a | 1b | 1c | 1d)?(2 | 2a | 2b | 2c | 2d)?(3…9d)?$
只是要看看应用程序的正则表达式引擎是否支持它…谢谢