我想验证文本字段只接受这样的文字:
我不想要这样的类型:
所以我做了这个正则表达式,但似乎并没有像我想要的那样工作
var reg = /^\d*(((?!.*--)(?!.*,,)(?!.*;;)(?!.*,;)(?!.*,-)(?!.*-;)(?!.*-,)(?!.*;,)(?!.*;-))[,-;])*\d$/
感谢您的帮助:)
答案 0 :(得分:1)
您可以使用
/^\d+(?:(?:[-,;]\d+){3,})?$/
请参阅regex demo
<强>详情
^
- 字符串开头\d+
- 一位或多位(?:(?:[-,;]\d+){3,})?
- 1或0个序列:
(?:[-,;]\d+){3,}
- 3个序列:
[-,;]
- -
,,
或;
\d+
- 一位或多位$
- 字符串结尾
var ss = [ '1,2;2,3;1-3','1-2;4;2,3;4;1-3','12',';1',',1','-1','1;;2','1,,2','1--2','1-2-3','1,2,3','1,2-3',';1',',1','-1','1;;2','1,,2','1--2' ];
var rx = /^\d+(?:(?:[-,;]\d+){3,})?$/;
for (var s of ss) {
console.log(s, "=>", rx.test(s));
}
&#13;
注意:[,-;]
创建了,
和;
之间的范围,其匹配程度远远超过,
,-
或;
(见demo)。
答案 1 :(得分:1)
你可以简单地使用正则表达式
function match(str){
return str.match(/^(?!.*([-,])\d+\1)(?!.*,\d+-)\d+(?:[-,;]\d+)*$/) != null
}
console.log(match(';1'));
console.log(match(',1'));
console.log(match('1;;2'));
console.log(match('1-3'));
console.log(match('12'));
console.log(match('1,2;2,3;1-3'));
console.log(match('1-2;4;2,3;4;1-3'));
console.log(match('1,2,3'));
答案 2 :(得分:1)
这是我的尝试。根据您的示例,我假设分号用于分隔&#39;范围&#39;其中&#39;范围&#39;可以是由逗号或连字符分隔的单个数字或一对。
var re = /^\d+([,\-]\d+)?(;\d+([,\-]\d+)?)*$/;
// Test cases
[
'1',
'1,2',
'1-2',
'1;2',
'1,2;2,3;1-3',
'1-2;4;2,3;4;1-3',
'12',
';1',
',1',
'-1',
'1;;2',
'1,,2',
'1--2',
'1-2-3',
'1,2,3',
'1,2-3'
].forEach(function(str) {
console.log(re.test(str));
});
&#13;
第一部分\d+([,\-]\d+)?
匹配&#39;范围&#39;第二部分(;\d+([,\-]\d+)?)*
允许进一步的范围&#39;要添加,每个都以分号开头。
如果您愿意,可以添加?:
以使群组无法捕获。这可能是一个好主意,但我想尽可能简单地保持我的榜样,所以我把它们抛弃了。