首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex数字被分离或-没有数字重复和增长

Regex数字被分离或-没有数字重复和增长
EN

Stack Overflow用户
提问于 2016-04-21 09:57:51
回答 2查看 48关注 0票数 2

我在寻找一个与以下例子相匹配的正则表达式:1,2-5,7,10.

Description:从数字开始,可以选择后面跟着“、”或"-“,后面跟着一个数字。

限制:不能有超过4位数的数字。

必须以数字开头和结尾。

不得包含相同的数字两倍或更多。

数字不能比以前的数字小(例如: 1,3-7,2不匹配)

实际上我需要一个靶标。

可以输入的数据示例: 1004,1032,1051,1062,1070,1092,1115,1136,1148,1164,1175,1180,1320,1332,1344,1350,‌​1368,1380,1386,1406,1414,1418,1428,1442,1448,1506,1524,1534,1550,1578,1584,1594,1‌​688,1708,1722,1750,1768,1772,1824,1853,4202-4205,8004,8180

我的正则表达式解决了一些情况,但不解决最后两种情况:(^(\d{1,4}))((,-\d{1,4})+?

有人知道如何解决最后两个案子吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-21 12:19:54

使用Regex执行最后两个限制是不实际的。正如Tobias所提到的,Regex在模式方面很棒,但在逻辑方面却不是那么好。我将研究其他选项,例如在执行的编程/脚本语言中检索完全匹配、在逗号上拆分以及使用循环进行验证。

要获得一个稍微健壮一些的范围列表,请尝试:

代码语言:javascript
复制
^\d{1,4}(-\d{1,4})?(,\d{1,4}(-\d{1,4})?)*$

这将防止诸如1,2-3-4-5之类的条目。

票数 0
EN

Stack Overflow用户

发布于 2016-04-21 10:14:54

使用Regex,您只能检查模式,例如只有4位数字,它们之间只有,-等,但您不能检查逻辑,例如确保下一个数字高于前一个数字或确保没有使用两次数字(实际上,您可以,但您必须写下所有可能的数字,在您的例子中是10000个不同的数字-我认为您不想这样做)。

顺便说一句:您可以在末尾添加一个$,以确保字符串结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36766109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档