非重复字符正则表达式
一位同事使用一个应用程序,该应用程序使用正则表达式来验证数据输入字段。
他需要允许用户从数字 1-9 中进行选择。
即 1, 2, 3, ..., 12, 13, ..., 23, 24, ..., ..., 123456789
明显的基本 [1-9]{1,9} 不会不允许重复的数字或强制执行数字顺序。
数字不能重复(不允许 11、343 等),并且必须按数字顺序排列(不允许 21、164 等)。
如果无法分别匹配 320 种可能性“(1|2|3|...|12|13|...)”,我该如何实现这一点?
A colleague uses a application which uses regular expressions to validate data entry fields.
He needs to allows users to choose from digits 1-9.
i.e. 1, 2, 3, ..., 12, 13, ..., 23, 24, ..., ..., 123456789
The obvious basic [1-9]{1,9} would not disallow repeated digits or enforce numerical order.
A digit cannot be repeated (disallow 11, 343, etc.) and they must be in numerical order (disallow 21, 164, etc).
Short of matching the 320 possibilities separately "(1|2|3|...|12|13|...)", how can I achieve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个?
显然,用户最多可以插入 9 位数字 (123456789),并且可以从任意一位开始。任何数字都是可选的,但顺序是固定的。
如果您希望需要一个数字,请使用前视
或后视
或负前视
或负后视,
因此至少需要一个数字
如果您的正则表达式语言没有前视(和后视),您可以这样做:
现在第一个数字“分支”到以下可选数字的“有效”组合。
This one?
Clearly the user can insert up to 9 digits (123456789) and he can start from any one. Any digit is optional, but the order is fixed.
If you want a digit to be necessary, use a look ahead
or look behind
or negative look ahead
or negative look behind
so at least a digit is necessary
If your regex language doesn't have look aheads (and look behinds) you can do:
Now the first digit "branches" to the "valid" combination of following optional digits.