需求如下,有一字符串str,写正则表达式,必须满足如下条件:
1,不能为空字符串
2,必须是整数
3,不能以0开头
4,0-9中每个数字,只能出现一次。即0-9这十个数每个数只能出现一次,1265是可以的,1125667就不行了,1出现了2次,6也出现了两次1,2,3条件很容易写,不过条件4想了很久未果,求高手教下这个正则表达式如何写

解决方案 »

  1.   

    orz...捕获组忘记加了- -
    ^(?!0)(?:([0-9])(?!.*?\1))+$
      

  2.   


    学习<script>
      var reg = /^(?!0)(?:([0-9])(?!.*?\1))+$/;
      var s = "12304567891";
      alert(reg.test(s));  </script>
      

  3.   

    解决了.
    2楼muxrwc完全正确!<script id="begin">
    var str=["0",""," ",
    "1230416",
    "adddff0255",
    "123.56",
    "12345",
    "0123",
    "112345",
    "124504",
    "123456789",
    "1234567890",
    "1234967890",
    "0123456789",
    "12345678901",
    "1"];
    //两种表达式异曲同工:
    var exp2=/^(?!0)(?:([0-9])(?!.*?\1))+$/;
    var exp3=/^(?=[1-9])(?:([0-9])(?!.*?\1)){1,10}$/;
    for(i in str){
    document.write("<li>"+i+": "+str[i]+" : "+(str[i].match(exp2)?true:null)+" : "+(str[i].match(exp3)?true:null));
    }
    </script>
      

  4.   

    是四种捕获方式(?=p),(?:p),(?!p),(p)都齐了! 
      

  5.   

    muxrwc,langtse 能解释一下
    /^(?!0)(?:([0-9])(?!.*?\1))+$/;
    的具体意思么?
    ?: 
    ?!.*?\1
    都是什么意思?我的正则表达式的书里没教这么深.网上的资料也没讲这么深.
    或者介绍一本书或资料吧。
      

  6.   


    \d有unicode兼容问题...不建议使用...{1,10},这个没意义.而且在IE里还有可能有和预查冲突的BUG.
    因为不重复的肯定是<=10位的.就是那个意思\1是反向引用.
    相当于$1
    只不过是用在式子里面...(?!.*?\1)
    就是后面不允许有和当前相同的字符...
      

  7.   


    var regex1=/^(?!0)(?:([0-9])(?![0-9]*?\1))+$/g;
      

  8.   

    var regex1=/^(?!0)(?:([0-9])(?![0-9]*?\1))+$/g;
     这个可以
      

  9.   

    什么反向引用,不知道了。很多不懂,只有些基础知识,写些简单的公式。网上的中文资料也少。请问谁看过下面这本书? 有没有讲正则表达式的高级内容,做为进阶的书怎么样?精通正则表达式(第3版) 作  者: (美)佛瑞德(Friedl,J.E.F.) 著,余晟 译
    出 版 社: 电子工业出版社当当网的地址:http://product.dangdang.com/product.aspx?product_id=20028613
      

  10.   

    只能用两个来完成,写一个没写出来,还是好奇厉害!
    var oReg1=/^\d+$/
    var oReg2=/(\d).*?\1/;
    var sInput="012340";
    alert(oReg1.test(sInput)&&!oReg2.test(sInput));