我试图编写一个JavaScript正则表达式,以便只允许以下输入:
到目前为止,我有以下表达:
^[0-9]$|^[0-9]+$|^[0-9](-?,?[0-9])*$然而,这是允许1-1-1,我不想要。一个连字符只能出现在另一个数字-连字符-数字组合后面。
此链接可能会有所帮助:http://regexr.com?34ljt
下列样本应被评估为有效:
01,03,05-08 10 0103.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 56,1 1,1 1,3 1,3,4,5 1,3
下列样本应被评估为无效:
斯德夫 11-11-11-11 1-1-1-1 F 01, 0103-05-08, -1,4-,-5,8909 1,1,1-1 1,1,11-1111-1 1-1 1,1 1-1 1- 1,, 、-1- df -1 ,1
发布于 2013-04-24 17:41:11
试一试
/^\d+(-\d+)?(,\d+(-\d+)?)*$/继评论意见之后
如果有连续的范围,防止匹配的一种方法是添加一个负面的前瞻性。
(?!.*-\d+,\d+-)所以regex变成
/^(?!.*-\d+,\d+-)\d+(-\d+)?(,\d+(-\d+)?)*$/如果消极展望内的模式可以匹配,则会阻止整个正则表达式匹配。使用.*时,如果在字符串前面的任何地方都能找到-1,1-,则会阻止匹配。
发布于 2013-04-24 17:45:56
不错的链接,并赞扬提供足够的例子,以彻底确定一个解决方案是否正确。这似乎是可行的:
^([0-9]+(-[0-9]+)?(,(?!$)|$))+$http://regexr.com?34lk6
因此:数字,可选地后面跟着一个破折号和更多的数字,后面跟着一个逗号(除非逗号是行尾之前的最后一个字符)或行尾。
https://stackoverflow.com/questions/16198564
复制相似问题