<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>这个符合我的要求
但我用一个验证控件只能用一个正则
如何能把这两个正则合并呢

解决方案 »

  1.   

    先将r2取反,然后再和r1做'或'连接,拼凑成r
    用r去test就行了.
      

  2.   

    1|2|3|31|3很奇怪...这时好像是FALSE的...
      

  3.   

    这样试试:
    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
      

  4.   

    偶然看到伴水回帖,过来凑个热闹,借用一下伴水的代码<script>
    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));
    输出结果同伴水的一样
      

  5.   

    也凑凑热闹的/^(?!.*(\d+)\b.*\|\1\b)\d+(?:\|\d+)*$/.test(s)
      

  6.   

    过客的正则就是强( ⊙o⊙ )哇看来?:、?!得再熟悉一下,,,/^((\d+)(?!.*\|\2\b)\|)*\d+$/
      

  7.   

    这个和relpace中用到的$1 $2 $3 意思一样,在正则本身就写为\1 \2 \3
      

  8.   

    勘误:String.replace()alert("a1s2d3f4".replace(/(\w)\d/g, "$1"));
      

  9.   


    嗅大了,原来上面写的是错的
    // 重新来一个吧, 虽然还长了,不过平均性能还不错
    /^(?!.*\b(\d+)\b.*\|\1\b)\d+(?:\|\d+)*$/.test(s)