<script type="text/javascript" >
function EvaluatePassword(word) {
  if (word == "") {
  return 0;
}
else if (word.length < 6) {
  return 1;
}
else  {
return word.match(/[a-z](?![^a-z]*[a-z])|[A-Z](?![^A-Z]*[A-Z])|\d(?![^\d]*\d)|[^a-zA-Z\d](?![a-zA-Z\d]*[^a-zA-Z\d])/g).length;
  }
}function CheckPassword(password) {
document.getElementById("n").innerHTML = function (password) {
  switch (EvaluatePassword(password)) {
   case 0:
   return "未输入";
   case 1:
   return "太简单";
   case 2:
   return "还可以";
   case 3:
   return "比较强";
   case 4:
   return "非常强";
  }
 }(password)          //这个匿名函数尾巴上为啥还有个参?}
    </script>
        <input type="text" id="txt" onkeyup="CheckPassword(this.value)"><label id="n"></label>这个代码是我找的,两个地方看不懂:1、谁能解释下那个正则,我有点看不懂负向前瞻里面那块2、上面也提出了,函数尾巴上为啥还有个参,我看到有些函数是这种写法,哪怕里面没有参数,右大括号后也要带个括号
没有就运行不起,请问是什么原因

解决方案 »

  1.   

    1.http://topic.csdn.net/u/20110124/02/903e8edd-afc0-4a55-80d2-719317cd6684.html
    2.自执行函数
      

  2.   

    这个还真不好解释呢,主要是他的实现有点绕。。
    这么说吧,/[a-z](?![^a-z]*[a-z])|[A-Z](?![^A-Z]*[A-Z])|\d(?![^\d]*\d)|[^a-zA-Z\d](?![a-zA-Z\d]*[^a-zA-Z\d])/g总共由四部分组成,分别是
    1) [a-z](?![^a-z]*[a-z])
    2) [A-Z](?![^A-Z]*[A-Z])
    3) \d(?![^\d]*\d)
    4) [^a-zA-Z\d](?![a-zA-Z\d]*[^a-zA-Z\d]
    正好对应密码的组成元素(小写字母,大写字母,数字,符号);本来呢实现查找小写字母,大写字母,数字,符号只需要/[a-z]+|[A-Z]+|\d+|[^a-zA-Z\d]+/g就可以了,但是密码是没有固定形式的,比如abc123cde这种形式就会出问题了,用/[a-z]+|[A-Z]+|\d+|[^a-zA-Z\d]+/g会得到abc,123,cde三个匹配,不符合要求,所以用[a-z](?![^a-z]*[a-z])过滤掉了abc,其他的同理。。
    再说下[a-z](?![^a-z]*[a-z]),这个正则表示匹配一个小写字母,且这个小写字母后面不能紧跟着小括号中描述的组合(若干个非小写字母 + 一个小写字母),其他的同理。。第二个问题是自执行函数的写法,var ret = function demo(arg){return arg;})(str)表示定义了demo函数并传入str参数并执行,
      

  3.   

    如果不加那个括号document.getElementById("n").innerHTML = function (password) {
    ...
     }这样写只是定义了一个匿名函数,并把这个匿名函数的引用传给n的innerHTML