我来帮你搞
那个整体为 string reg1=(\[[0-9]+,[0-9]+\])|\[[0-9]+,\*\]|\[\*,[0-9]+\]|\[\*,\*\]
运算符为 string reg2=[+\-\*/]
比较符号为:string reg3=(>=)|(<=)|(!=)|[><=]
整体你自己连起来吧

解决方案 »

  1.   


    <script language="JavaScript">
    <!--
    var aa = "[14,2]+[20,3] <[15,3]+[16,8]+[15,6]";
    var reg = /^((\[(\d+|\*),(\d+|\*)\])(\s|)(\+|\-|\*|\/)(\s|))*(\[(\d+|\*),(\d+|\*)\])(\s|)(>|<|>=|<=|!=|=)(\s|)((\[(\d+|\*),(\d+|\*)\])(\s|)(\+|\-|\*|\/)(\s|))*(\[(\d+|\*),(\d+|\*)\])$/;
    alert(reg.test(aa));
    //-->
    </script>试试看。
      

  2.   

    /([(\d+|\*),(\d+|\*)]|\d)(\+\1)+(\s?)(>|<|>=|<=|!=|=)\1(\+\1)+/
      

  3.   

    /^(((\[[1-9]\d*|\d),([1-9]\d*|\d|\*)\]|[1-9]\d*|\d)\s*([+-/\*]|[<>!]=?|=)\s*)*((\[[1-9]\d*|\d),([1-9]\d*|\d|\*)\]|[1-9]\d*|\d)$/
      

  4.   

    测试数据[14,2]+[20,123] > 145 <[5,*]+[16,8]+[15,6]+15  --- OK
    [014,2]+[20,123] > 145 <[5,*]+[16,8]+[15,6]+15 --- NG
      

  5.   

    /([(\d+|\*),(\d+|\*)]|\d)([+-*/]\1)+(\s?)(>| <|>=| <=|!=|=)\1([+-*/]\1)+/
      

  6.   

    在IE6工作正常,但在FF3中,同一个字符串,会出现一次正确,一次错误的情况,而且是很严格地交替出现,暂时还不知道为什么望高手解惑..
    <html>
    <title>AdvancedRegularExpression</title>
    <script language="javascript">
    function Verify()
    {
    var str = document.getElementById("txt").value;
    var re = /^\[(\d+|\*),(\d+|\*)\]((\+|\-|\*|\/)\[(\d+|\*),(\d+|\*)\])*(>|=|<|>=|<=|!=)\[(\d+|\*),(\d+|\*)\]((\+|\-|\*|\/)\[(\d+|\*),(\d+|\*)\])*$/gi;
    var lbl = document.getElementById("lblMsg");
    lbl.innerHTML += str + " : " + re.test(str).toString() + "<br>";
    }
    </script>
    <body>
    <input type="text" id="txt"/><br/>
    <input type="button" name="submit" value="Submit" onclick="Verify();">
    <div id="lblMsg"></div>
    </body>
    </html>
      

  7.   

    /^((\[([1-9]\d*|\d|\*),([1-9]\d*|\d|\*)\]|[1-9]\d*|\d)\s*([+-/\*]|[<>!]=?|=)\s*)*(\[([1-9]\d*|\d|\*),([1-9]\d*|\d|\*)\]|[1-9]\d*|\d)$/
      

  8.   

    早说呀。
    不过很长。
    快崩溃了,
    觉得这么长的正则式还不如编程实现了呢。
    /^\s*((\[(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))\]|[1-9]\d*|\d)\s*[+-/\*])*(\[(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))\]|[1-9]\d*|\d)\s*([+-/\*]|[<>!]=?|=)\s*((\[(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))\]|[1-9]\d*|\d)\s*[+-/\*])*(\[(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))\]|[1-9]\d*|\d)$/不会你看完之后你又有新要求了吧?!!!!
      

  9.   

    按楼主给的代码15,3]+[16,8] 里的 +符号两边不允许有空格(如需要可以改就是把|\d+)\+)*改成|\d+)\s*\+\s*)*)
    中间的比较符号< >....两边允许有空格
    <script>
    var reg = /^(?:(?:\[\d+,(?:\d+|[\+\-\*\/])\]|\d+)\+)*(?:\[\d+,(?:\d+|[\+\-\*\/])\]|\d+)\s*(?:[<>=]|>=|<=|!=)\s*(?:(?:\[\d+,(?:\d+|[\+\-\*\/])\]|\d+)\+)*(?:\[\d+,(?:\d+|[\+\-\*\/])\]|\d+)$/;
    var str = '[14,2]+[20,3] <[15,3]+[16,8]+[15,6]';
    var str2 = '[14,2]+[20,3] <=[15,3]+[16,8]+[15,6]+20';
    var str3 = '[14,*] !=[15,*]+[16,*]';
    alert(reg.test(str)); // true
    alert(reg.test(str2)); // true
    alert(reg.test(str3)); // true
    </script>
      

  10.   

    按楼主给的代码 15,3]+[16,8] 里的 +符号两边不允许有空格(如需要可以改就是把|\d+)\+)*改成|\d+)\s*\+\s*)*) 
    中间的比较符号 < >....两边允许有空格 HTML code<script>
        var reg = /^(?:(?:\[\d+,(?:\d+|[\+\-\*\/])\]|\d+)\+)*(?:\[\d+,(?:\d+|[\+\-\*\/])\]|\d+)\s*(?:[<>=]|>=|<=|!=)\s*(?:(?:\[\d+,(?:\d+|[\+\-\*\/])\]|\d+)\+)*(?:\[\d+,(?:\d+|[\+\-\*\/])\]|\d+)$/;
        var str = '[14,2]+[20,3] <[15,…
      

  11.   

    晕!
    刚刚的正则式里有一处错误。
    判断符号校验错了,([+-/\*]|[<>!]=?|=) 应该改为 ([<>!]=?|=)另外,楼主对于空格确实交待的不清楚。
    为处理上方面这样做比较好。(1)将字符串中的空格去掉
    str.replace(/\s+/g,"");(2)然后再进行判断。
    /^((\[(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))\]|[1-9]\d*|\d)[+-/\*])*(\[(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))\]|[1-9]\d*|\d)([<>!]=?|=)((\[(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))\]|[1-9]\d*|\d)[+-/\*])*(\[(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))\]|[1-9]\d*|\d)$/
      

  12.   

    syukugai:
    有什么办法可以获得[]中的两个数字(或是*),我想对那里面的两个数字进行验证,不能超过一个范围
    [1,2]  1有个范围 ,2也有个范围, 范围都是动态生成的
      

  13.   

    应该是接着上面的处理吧。用这个正则式把数取出来,
    /([^[])(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))(?=\])|[1-9]\d*/然后用split把两个数分开。当然你需要循环处理了。
    接下来你解析判断一下数字的范围就可以了。
      

  14.   

    刚刚那个正则式有问题,
    试试这个/(?=[^[])(([1-9]\d*|\d),([1-9]\d*|\d|\*)|([1-9]\d*|\d|\*),([1-9]\d*|\d))(?=\])/