我有验证数字范围的场景,它可以是多个范围或单个数字。
Ex1到10可以写成( 1-3 ,4,5-8,9,10)这里1-3表示rage (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)
发布于 2016-08-31 18:11:37
这应该是您想要的正则表达式:
^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$
它检查以下序列:
\\d+
:一个或多个数字
(-\\d+)?
:可选的连字符序列,后跟一个或多个数字
(,\\d+(-\\d+)?)*
:零次或多次出现逗号后跟一个或多个数字,后跟一个可选连字符序列,后跟一个或多个数字
由于正则表达式在开头查找数字,因此不允许使用以连字符或逗号开头的字符串。
当它查找后面紧跟连字符和逗号的数字、具有连续连字符或逗号的字符串、紧跟逗号的连字符或反之时,不允许这样做。
由于(-\\d+)?
中的?
恰好允许(-\\d+)
序列出现零次或一次,因此不会匹配像1-2-3这样的范围。
如果您不需要单独允许单个数字,请将^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$
中的*
替换为+
。
发布于 2016-08-31 17:56:34
https://stackoverflow.com/questions/39246040
复制相似问题