非重复字符正则表达式

发布于 2024-12-11 15:33:49 字数 301 浏览 0 评论 0原文

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

他需要允许用户从数字 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逐鹿 2024-12-18 15:33:49
^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)$

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

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

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

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

or look behind

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

or negative look ahead

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

or negative look behind

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

so at least a digit is necessary

If your regex language doesn't have look aheads (and look behinds) you can do:

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

Now the first digit "branches" to the "valid" combination of following optional digits.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文