<script>
var r1=/^(\d+\|)*\d+$/;
var r2=/((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/;var s = "1|2|3|31|5"alert(r1.test(s) && !r2.test(s))
</script>这个符合我的要求
但我用一个验证控件只能用一个正则
如何能把这两个正则合并呢
var r1=/^(\d+\|)*\d+$/;
var r2=/((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/;var s = "1|2|3|31|5"alert(r1.test(s) && !r2.test(s))
</script>这个符合我的要求
但我用一个验证控件只能用一个正则
如何能把这两个正则合并呢
用r去test就行了.
document.close();
document.open();var r1=/^(\d+\|)*\d+$/;
var r2=/((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/;
var r3=/[^\d^\|]|^\||\|$|\|\||((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/var data = ["1", "1|", "|2", "1||2", "1|2", "2|2|3", "1|2|3|31|5", "1|2|3|31|3|5", "1|2|331|5", "2|1|3|31|5|1"];for(var i = 0; i < data.length; i++) {
var s = data[i];
document.write(s);
document.write("=");
document.write(r1.test(s) && !r2.test(s));
document.write(",");
document.write(!r3.test(s));
document.write("<br/>");
}1=true,true
1|=false,false
|2=false,false
1||2=false,false
1|2=true,true
2|2|3=false,false
1|2|3|31|5=true,true
1|2|3|31|3|5=false,false
1|2|331|5=true,true
2|1|3|31|5|1=false,false
document.close();
document.open();var r1=/^(\d+\|)*\d+$/;
var r2=/((^|\|)(\d+)(\|\d+)*?)\|\3(\||$)/;
var r3=/^(?:(\d+)(?!.*\|\1\b)\|)*\d+$/;var data = ["1", "1|", "|2", "1||2", "1|2", "2|2|3", "1|2|3|31|5", "1|2|3|31|3|5", "1|2|331|5", "2|1|3|31|5|1"];for(var i = 0; i < data.length; i++) {
var s = data[i];
document.write(s);
document.write("=");
document.write(r1.test(s) && !r2.test(s));
document.write(",");
document.write(r3.test(s));
document.write("<br/>");
}</script>改动了两行
var r3=/^(?:(\d+)(?!.*\|\1\b)\|)*\d+$/;
document.write(r3.test(s));
输出结果同伴水的一样
嗅大了,原来上面写的是错的
// 重新来一个吧, 虽然还长了,不过平均性能还不错
/^(?!.*\b(\d+)\b.*\|\1\b)\d+(?:\|\d+)*$/.test(s)