验证一个字符串,必须包含不少一个大写字母,一个小写字母,一个数字,一个特殊符号, 字符串的长度为6-10,
比如 Aa8+001,8aA001+
大写字母,小写字母,数字,特殊符号,必须有一个,可以多个字母,数字,特殊符号,地顺序不限制

解决方案 »

  1.   

    不知道怎么用一个正则达到要求,但是可以“拆分”要求
    只要分别满足各个要求就行了
    比如下面的代码中,必须满足 5 个正则才通过
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>
    <head>
    <title>test</title>
    </head><script>
    var reg = [];
    reg[0] = /[a-z]/; // 小写
    reg[1] = /[A-Z]/; // 大写
    reg[2] = /\d/; // 数字
    reg[3] = /[^a-zA-Z\d]/; // 特殊符号
    reg[4] = /^.{6,10}$/; // 长度为 6~10var str = "Aa8+001";
    alert(myTest(str,reg));str = "8aA001+";
    alert(myTest(str,reg));str = "8888888";
    alert(myTest(str,reg));function myTest(str,reg){
    var flag = true;
    for(var i = 0;(e = reg[i]);i++){
    flag = flag && reg[i].test(str);
    }
    return flag;
    }
    </script><body>
    </body></html>
      

  2.   

    reg[0] = /[a-z]/;        // 小写
    reg[1] = /[A-Z]/;        // 大写
    reg[2] = /\d/;            // 数字
    reg[3] = /[^a-zA-Z\d]/;        // 特殊符号
    reg[4] = /^.{6,10}$/;        // 长度为 6~10
    用这几个用|组合起来就可以了意思就是: /[a-z]|[A-Z]|[\d]|[^a-zA-Z\d]|[^.{6,10}$]/; 
      

  3.   

    利用多重顺序环视,表达式应该是这样的:/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9]).{6,10}$/但是这个表达式在 IE 6 下面无效,在 Firefox 下是正确的。在IE 6 下 (?=) 有严重的 bug,即其中的 .* 无效!不知在 IE 7 下是否有这个问题?如果不这样做的话,只能避免采用 (?=) 这个,参考代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=gbk" />
      <title>Table</title>
    </head><script type="text/javascript">
    function check() {
      var txt = document.frm.txt.value;
      var regexs = [
          /[a-z]/,
          /[A-Z]/,
          /[0-9]/,
          /[^a-zA-Z0-9]/
        ]  
      var r = txt.length >= 6 && txt.length <= 10;
      for(var i = 0; r && i < regexs.length; i++) {
        r = txt.search(regexs[i]) > -1;
      }
      alert(r);
      document.frm.txt.focus();
      document.frm.txt.select();
      return false;
    }window.onload = function() {
      document.frm.txt.focus();
    }
    </script><body>
      <form name="frm" action="#" onsubmit="return check();">
        Value: <input type="text" name="txt"><br/>
        <input type="button" onclick="check();" value="check">
      </form>
    </body>
    </html>
      

  4.   

    我对你所说的“特殊字符”不是很理解,目前仅用 [^a-zA-Z0-9] 这种代替了,
    但我认为这显然是不对的,楼主根据需求自己改一下吧。
      

  5.   

    下面的例子如何?<script>
    var reg = /[a-z]|[A-Z]|[\d]|[^a-zA-Z\d]|[^.{6,10}$]/;
    str = "a";// LZ 要求的“不少一个大写字母,一个小写字母,一个数字,一个特殊符号, 字符串的长度为6-10”
    alert(reg.test(str));
    </script>
      

  6.   


    这个表达式有人说正解的话,就不得不说两句了。姑且不说最后一个 [^.{6,10}$] 写错了(估计是 ^.{6,10}$ 的笔误)之外先不看这一块。先看看前面的部分,| 是表示这一堆当中选择一组进行匹配,其中只要满足一组时,匹配就是 true,
    这显然是不正确的。[a-z]|[A-Z]|[\d]|[^a-zA-Z\d]这个只是匹配小写字母,或者大写字母,或者数字,或者是非上述字符,只要满一个条件就是
    true 了,这并不能满足楼主的至少一个小写字母、一个大写字母、一个数字和一个其他的字符。正则表达式中只有表示“或”的结构,没有表示“与”的结构,表示“与”时一般采用多重顺序
    环视结构,即 (?=),但这个在 IE 6 中有 bug 因此不能使用(在其他语言和 Firefox 下面
    是正常的),我们只能采用其他变通的办法。
    是啊,不知道是他们理解错了,还是我们理解错了,呵呵。如果是我理解错了,望各位能海涵  ^_^