我需要验证用户输入的字符串。字符串应该允许用逗号分隔的数字或范围。数字必须在1到64之间。
Sample: 1,8,7-9,10-12,20-45
逗号或“-”之前和后面都允许有空格。
发布于 2015-01-15 15:13:44
这就是你要的,
^(?: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>*
。
发布于 2015-01-15 15:14:14
这应该与1-64之间的整数匹配。
([1-9]|[1-5][0-9]|6[0-4])
这也应该接受范围。
([1-9]|[1-5][0-9]|6[0-4])(-([1-9]|[1-5][0-9]|6[0-4]))?
在一行中匹配一个或多个。
^(([1-9]|[1-5][0-9]|6[0-4])(-([1-9]|[1-5][0-9]|6[0-4]))?\s*($|,\s*))+$
发布于 2015-01-15 15:12:26
看上去会很恶心。我不认为有一个简单的答案,因为正则表达式匹配字符串,而不是数字。结果发现,0到64之间的数字如下所示
[1-6]?[0-9]
有些可能包含了一个范围(但没有空格或逗号)
[1-6]?[0-9](\-[1-6]?[0-9])?
编辑
在这里,我用"?“手动输入空格和逗号。在(出现一次或根本不出现)之后,如果允许多个空格,请更改相关的"?“对于"*“我不能百分之百地保证这会起作用,但是一片片地建造它,我相信它会成功的。
\([1-6]?[0-9]\( ?\- ?[1-6]?[0-9]\)? ?,? ?\)+
如果我想出更好的东西,我会尽力更新的。
EDIT2
如果我正确地分组编写,我的旧模式将匹配0。让我们试试这个:
((([1-5]?[0-9])|(6[0-4])((\s?\-\s?([1-5]?[0-9])|(6[0-4]))?)(\s?,\s?)?)+
编码愉快!如果你有任何问题,请留下评论。
https://stackoverflow.com/questions/27966395
复制相似问题