我正在尝试编写一个JavaScript正则表达式,只允许以下输入:
到目前为止,我有以下表达式:
^[0-9]$|^[0-9]+$|^[0-9](-?,?[0-9])*$
然而,这是允许1-1-1
,我不想要。只有在没有后跟另一个数字 - 连字符数组合时才会出现连字符。
此链接可能有所帮助:http://regexr.com?34ljt
以下样本应评估为有效:
01,03,05-08,10
01,03,05
01,03,05-08
01
1,1,5-6,1,1
1,1,5-6,1,1-3
12,12,1-9
1-9,5,5
1-9,9,9,5-6
1-2
11-11
11,11
1,1
1,1,1
11,11,11
1111
1,1,1,1,1,1
1
56.1
1,1
1,3
1,3,4,5
1,3
以下样本应评估为无效:
sdfdf
11-11-11-11
1-1-1-1-1
˚F
01,
01,03,05-08,
-1,4 - , - 5,8909
1,1,1-1-1
1,1,11-1111-1
1-1-1
1,...,1
1--1
1-
1 ,,
,-1-
DF
-1
,1
答案 0 :(得分:3)
很好的链接,并且提供足够的示例来彻底确定解决方案是否正确。这似乎有效:
^([0-9]+(-[0-9]+)?(,(?!$)|$))+$
所以:数字,可选地后跟短划线和更多数字,后跟逗号(除非逗号是行尾之前的最后一个字符)或行尾。
答案 1 :(得分:2)
尝试
/^\d+(-\d+)?(,\d+(-\d+)?)*$/
继续评论
如果存在连续范围,则阻止匹配的一种方法是添加负前瞻
(?!.*-\d+,\d+-)
所以正则表达式变成了
/^(?!.*-\d+,\d+-)\d+(-\d+)?(,\d+(-\d+)?)*$/
如果负前瞻中的模式可以匹配,则会阻止整个正则表达式匹配。使用.*
以便例如<{1}}位于字符串前面的任何位置,将阻止匹配。