首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex接受以逗号分隔的数字和/或数字范围,但在范围1-64之间。

Regex接受以逗号分隔的数字和/或数字范围,但在范围1-64之间。
EN

Stack Overflow用户
提问于 2015-01-15 15:05:06
回答 3查看 2.3K关注 0票数 1

我需要验证用户输入的字符串。字符串应该允许用逗号分隔的数字或范围。数字必须在1到64之间。

代码语言:javascript
运行
复制
Sample: 1,8,7-9,10-12,20-45

逗号或“-”之前和后面都允许有空格。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-15 15:13:44

这就是你要的,

代码语言:javascript
运行
复制
^(?:6[0-4]|[1-5]\d|[1-9])(?: *- *(?:6[0-4]|[1-5]\d|[1-9]))?(?: *, *(?:6[0-4]|[1-5]\d|[1-9])(?: *- *(?:6[0-4]|[1-5]\d|[1-9]))?)*$

我使用<space>*而不是\s*,因为\s也匹配换行符。如果您对换行符没有问题,请使用\s而不是空格。如果您希望允许一个可选的空间而不是零或更多的空格,请使用\s?而不是<space>*

演示

票数 2
EN

Stack Overflow用户

发布于 2015-01-15 15:14:14

这应该与1-64之间的整数匹配。

代码语言:javascript
运行
复制
([1-9]|[1-5][0-9]|6[0-4])

这也应该接受范围。

代码语言:javascript
运行
复制
([1-9]|[1-5][0-9]|6[0-4])(-([1-9]|[1-5][0-9]|6[0-4]))?

在一行中匹配一个或多个。

代码语言:javascript
运行
复制
^(([1-9]|[1-5][0-9]|6[0-4])(-([1-9]|[1-5][0-9]|6[0-4]))?\s*($|,\s*))+$
票数 1
EN

Stack Overflow用户

发布于 2015-01-15 15:12:26

看上去会很恶心。我不认为有一个简单的答案,因为正则表达式匹配字符串,而不是数字。结果发现,0到64之间的数字如下所示

代码语言:javascript
运行
复制
[1-6]?[0-9]

有些可能包含了一个范围(但没有空格或逗号)

代码语言:javascript
运行
复制
[1-6]?[0-9](\-[1-6]?[0-9])?

编辑

在这里,我用"?“手动输入空格和逗号。在(出现一次或根本不出现)之后,如果允许多个空格,请更改相关的"?“对于"*“我不能百分之百地保证这会起作用,但是一片片地建造它,我相信它会成功的。

代码语言:javascript
运行
复制
\([1-6]?[0-9]\( ?\- ?[1-6]?[0-9]\)? ?,? ?\)+

如果我想出更好的东西,我会尽力更新的。

EDIT2

如果我正确地分组编写,我的旧模式将匹配0。让我们试试这个:

代码语言:javascript
运行
复制
((([1-5]?[0-9])|(6[0-4])((\s?\-\s?([1-5]?[0-9])|(6[0-4]))?)(\s?,\s?)?)+

编码愉快!如果你有任何问题,请留下评论。

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

https://stackoverflow.com/questions/27966395

复制
相关文章

相似问题

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