【发布时间】:2016-08-31 09:40:28
【问题描述】:
我有验证数字范围的方案,它可以是多个范围或单个数字。
Ex number 1 到 10 可以写成 (1-3,4,5-8,9,10) 这里 1-3 表示愤怒 (1,2,3) 我试过 java regex :
Pattern.matches("^[0-9][0-9,-]*,[0-9,-]*[0-9]$","11,131-132-134,45,12--10,,10");
这种模式允许连续的连字符和逗号,
有效输入
1) 1-3,4,5-8,9,10
2) 1-3,4-5,6-10
3) 1,2,3,4,5
4) 1,2-5,6
无效输入
1) ,2,3,4-10,
2) -2,3,4-10-
3) 2,3,,4-10
4) 2,3,4--10
5) 2,3,4-6-10 (Invalid range)
有人可以建议如何检查逗号和连字符不应该连续出现两次,以数字开头和结尾,范围不应该重复(4-8-10)
【问题讨论】:
-
试试这个 -> "^[0-9][0-9,-]*[0-9]$"
-
^\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*$- 但是反向范围呢,比如8-5?您无法使用正则表达式验证数字顺序。 -
@GovindMadhu 您的正则表达式允许例如
1,,3这是 OP 的无效选项。 -
您不应该添加
<br>标签来表示帖子中的换行符。这是一个降价编辑器。 @GovindMadhu -
@revo :我没有添加它们。在我之前编辑的人补充说。我忘了删除它。