verify驗證插件的詳解


使用此驗證插件,我們只需要新建一個實例對象,同時傳入一個json對象就行了,這里我們只傳入了兩個屬性:checkItem和callback。下面的代碼解析,我們就按照這個例子來。

var verify =new Validator({
  checkItem:[
    {"element":"#endTime","required":false,"rule":[{"reg":"int","errMsg":lang('org.userStrategy.end_with_int')}]},

    {"element":"#ruleMboxCapacity","required":true, "rule": [{"reg":"int","minValue":1,"maxValue":100}]},

    {"element":"#endTime","required":false,"rule":[{"reg":"int","errMsg":lang('org.userStrategy.int_gez'),"minValue":1}]},
    {"element":"#ruleIsMboxCapa","rule":[{"reg":"no","childElement":"#ruleMboxCapacity"}]}
  ],
  calback:function(){
      if($("#startTime").val()==""){
        return {
          "element":"#startTime",
          "status":false,
          "errMsg":lang('org.userStrategy.sdate_not_null')
        }
      }
      if($("#endTime").val()==""){
        return {
          "element":"#endTime",
          "status":false,
          "errMsg":lang('org.userStrategy.edate_not_null')
        }
      }
    
      return {
        "status":true
      }
  }
});

調用Validator實例對象verify.getVerifyStatus(),如果返回true,就代表你在checkItem傳入的元素驗證全部通過了,如果返回false,就代表還有元素驗證沒有通過。

var Validator = function(options){
  options = options || {"checkItem":null,"verifyCallback":null};    //options = {checkItem:[], callback: function(){}}
  this.barColor = ["#aa0033", "#ffcc33", "#6699cc", "#008000"];
  this.levelTitle = ["不符合規則","弱","中","強"];
  this.checkItem = options.checkItem || this.html2Json();  //這里我們有checkItem屬性,因此不會調用html2Json方法
  this.showPosition=options.showPosition || "right";    //默認為right
  this.verifyCallback = options.calback ;//自定義驗證的回調函數;
  this.init();
};
var hash_rule={};
Validator.prototype = {
  init:function(){
    var p = this;
    for(var i = 0 ;i<this.checkItem.length;i++){   //遍歷checkItem數組
      var ruleInfo = this.checkItem[i];
      var input = $(ruleInfo.element);    //數組中的每一項是一個json對象,其中element屬性值是頁面上元素節點的id
      input.off();            //移除此元素上通過on綁定的所有事件
      var inputType = input.attr("type");    //得到此元素的類型
      if(!ruleInfo.rule){       //查看此json對象是否有rule屬性值,如果沒有,就忽略,如果有,就繼續判斷
        continue;
      }
      //綁定文本框的失去焦點事件,當失去焦點后判斷文本框的內容是否合法
      if ((inputType == "text" || inputType == "password")) {   //如果元素的類型是text或是密碼框
        input.bind("blur", function(){    //就給此元素綁定blur事件
          p.event._blur(this, p)
        });
      }
      if(inputType =="checkbox" || inputType=="radio"){   //如果元素的類型是checkbox多選框或者是radio單選框
        var childElementList = ruleInfo.rule[0].childElement;  //rule屬性也是數組,選取它的第一項,看它是否有childElement屬性值
        if(typeof(childElementList)=="string"){     //這里只有checkItem數組中的第四項有
          childElementList=[childElementList];
          ruleInfo.rule[0].childElement = childElementList;   //把字符串轉換成數組:"childElement":["#ruleMboxCapacity"]
        }
        if(!input.is(":checked")){    //如果元素checkbox或radio沒有被選中,就進入if語句
          for (var j = 0; j < childElementList.length; j++) {    //就把設置它的子元素的屬性disabled和noVerify
            $(childElementList[j]).attr("disabled", "true");   //這里的意思其實就是如果父元素沒有被選上,那么子元素當然是不可用的,同時也不需要驗證
            $(childElementList[j]).attr("noVerify","1");
          }
        }
        input.bind("click",function(){    //給元素checkbox或radio綁定click事件
          var _ruleInfo = hash_rule[$(this).attr("guid")];  
          if(!_ruleInfo){
            return;
          }
          var childElementList = _ruleInfo.rule[0].childElement;
          if(typeof(childElementList)=="string"){
            childElementList=[childElementList];
          }
          if(!$(this).is(":checked")){   //如果點擊radio或checkbox后,元素沒有被選擇上

            for (var z = 0; z < childElementList.length; z++) {
              $(childElementList[z]).attr("noVerify","1");    //就設置它的子元素全部為不可用,並且不驗證
              $(childElementList[z]).attr("disabled","true");
              p._hideMessage($(childElementList[z]));    //隱藏錯誤信息
            }
          }else{
            for (var z = 0; z < childElementList.length; z++) {
              $(childElementList[z]).removeAttr("noVerify");
              $(childElementList[z]).removeAttr("disabled");
            }
          }
        })
      }
      //判斷當前元素是否是密碼框
      if(inputType=="password" ){
        var isCompare= false;
        for(var z = 0 ;z<ruleInfo.rule.length;z++){
          if(ruleInfo.rule[z].reg =="compare"){   //看一下checkItem中的reg的值是否是compare,如果是,就代表是密碼比較框,也就是你的確認密碼框
            isCompare=true;
 
          }
        }
        if (!isCompare) {           //如果就是密碼框
          if (ruleInfo.isAddTitle != false) {    //如果checkItem中有isAddTitle屬性值,並且不為false
            p._addPasswordHtml(input);//給密碼框加上強\弱\中的提示HTML
            input.attr("maxLength","30");   //最多輸入30個字符
            input.bind("keyup", function(){//綁定事件,判斷每次輸入后的密碼等級
              p.event._bindPassWord(this, p)
            });

          }
        }
      }
      if (ruleInfo.title) {        //如果checkItem數組中的每一個json對象中有title屬性,就給此元素綁定click事件。
        $(input).bind("click", this._click);
      }
      //生成一個時間戳,復制給元素節點的guid屬性中.然后將每個元素節點對應的驗證規則存儲在Hash中,后面就只要在hash中就能知道此元素需要驗證的規則了.
      var guid = new Date().getTime()+Math.floor(Math.random()*1000);
      input.attr("guid",guid);
      hash_rule[guid]=ruleInfo;
    }
  },

  //文本框的事件處理
  event:{
    _click :function(){
      var guid = $(this).attr("guid");
      var inputObj = hash_checkObj[guid];
      _showMessage($(this),inputObj.title);
    },
    //所有文本框的失去焦點的事件處理
    _blur :function(element,This){       //元素節點的類型為text或password時,當給此元素觸發blur事件時,會觸發此方法的執行
      if($(element).attr("noVerify")=="1"){      //判斷此元素是否需要驗證,等於1,就代表不用驗證
        This._hideMessage($(element));    //不需要驗證,就代表需要隱藏此元素的錯誤提示
        return true;
      }
      if($(element).parents("div:eq(0)").is(":hidden")){   //如果此元素的祖先元素中第一個div元素是隱藏的,就不用驗證,直接隱藏錯誤提示
        This._hideMessage($(element));
        return true;
      }
      var result = {};
      switch($(element).attr("type")){
        case "text":
          result = This.check._Input(element);    //驗證此框填的內容是否合法
          break;
        case "checkbox":
        case "radio":
          result = This.check._Checkbox(element,This);
          break;
        case "password":
          result = This.check._Passwod(element,This);   //如果是密碼框
          break;
      }
      if(!result.status){    //如果返回的狀態為false,就代表錯誤,然后把錯誤信息顯示出來
        This._showMessage($(element),result.errMsg);
      }else{
        This._hideMessage($(element));
      }
      return result.status;
    },
    //密碼框的文本輸入處理
    _bindPassWord:function(element,This){
      var options = {pwdMinLen: 6, pwdMaxLen: 30, pwdCheckType:1};
      var paswordInfo = This.PwdCheck($(element).val(),options);
      if(!paswordInfo.status){   //如果返回的狀態為false,就提示用戶有什么問題
        $(".pass_str_tips").html(paswordInfo.msg);
        $(".pass_str_tips").show();
      }else{   //如果返回的狀態是true
        $(".pass_str_tips").html("長度"+options.pwdMinLen+"-"+options.pwdMaxLen+"位半角字符(字母、數字、符號)組成,區分大小寫");
      }
      var levelTitle = $(".pass_str_txt").find("strong");
      levelTitle.html(This.levelTitle[paswordInfo.SafeLevel]);      //這里的levelTitle = ["不符合規則","弱","中","強"];
      levelTitle.css("color",This.barColor[paswordInfo.SafeLevel]);  //不同的提示,有不同的顏色

      $(".pass_str_bar").css({"width":(paswordInfo.SafeLevel+1)*45+"px","background-color":This.barColor[paswordInfo.SafeLevel]});
    }
  },
  addItem:function(item){   //增加驗證的元素
    item= item || this.html2Json();
    this.checkItem = this.checkItem.concat(item);
    this.init();
  },
  //對所有類型的文本框的檢查
  check:{
  //多選框
    _Checkbox:function(element,This){
      var result ={status:true,errMsg:""};
      //return result;
      if ($(element).is(":checked")) {
        var guid = $(element).attr("guid");
        var ruleInfo = hash_rule[guid];
        if (ruleInfo.rule[0].childElement) {
          var childList = ruleInfo.rule[0].childElement;
          for (var i = 0; i < childList.length; i++) {
            if (!This.event._blur(childList[i], This)) {
              result.status = false;
            }
          }
        }
        result.errMsg = ruleInfo.rule[0].errMsg;
      }
      return result;
    },
    //密碼框有2種驗證 一種是密碼的規則校驗,一種是密碼的比較,因為要確認密碼,所以有兩個密碼框
    _Passwod:function(element,This){
      var result ={ status:true , errMsg:"" };
      var guid = $(element).attr("guid");
      var ruleInfo = hash_rule[guid];
      if (ruleInfo) {
        if (ruleInfo.isAddTitle != false) {   //如果設置了isAddTitle屬性,並且不為false
          var isCompare = false, compareId = "";
          for (var z = 0; z < ruleInfo.rule.length; z++) {
            if (ruleInfo.rule[z].reg == "compare") {    //如果是確認密碼框
              isCompare = true;
              compareId = ruleInfo.rule[z].compare;    //如果是密碼比較框,這里的compare的屬性值就是被比較的那個密碼框的id
              result.errMsg = ruleInfo.rule[z].errMsg || "兩次輸入的密碼不一致";
            }
          }
          if (!isCompare) {   //如果是正常的密碼輸入框
            var options = {
              pwdMinLen: 6,
              pwdMaxLen: 30,
              pwdCheckType: 1
            };
            var paswordInfo = This.PwdCheck($(element).val(), options);
            result.status = paswordInfo.status;
            result.errMsg = "密碼不符合規則";
          }
          else {
            result.status = ($(compareId).val() == $(element).val() ? true : false);   //如果兩個密碼框的值一樣,就返回true
          }
        }
        else{
          return This.check._Input(element,ruleInfo);
        }
      }
      return result;
    },
    //自定義的列表框
    _List:function(element){
      var result ={ status : false , errMsg : "" };
      var guid = $(element).attr("guid");
      var ruleInfo = hash_rule[guid];
      if($(element).children().length>0){
        result.status=true;
      }
      result.errMsg=ruleInfo.rule[0].errMsg;
      return result;
    },
    //普通文本框
    _Input:function(element,rule){          
      var result ={ status : true , errMsg : "" };
      var guid = $(element).attr("guid");
      var ruleInfo = rule ? rule : hash_rule[guid];   //取到此元素在checkItem中的驗證規則
      if(!ruleInfo){    
        return;
      }
      var inputType = $(element).attr("type");
      var val = $.trim($(element).val());
      var required =true;
      if(ruleInfo.required==false){    //是否必須存在值,默認為true,也就是默認文本框必須存在值
        required=false;
      }
      if (required && val == "") {
        result.status = false;
        result.errMsg = "該項不能為空";
        return result;
      }
      if(util.Reg.isLegitimacy(val) && inputType != 'password'){  //如果不是密碼框,同時輸入框中的值有非法符號
        result.status = false;
        result.errMsg = "輸入值中含有非法符號"+$.unique(val.match(/[%\/\\\'\"&<\>|\^]/igm)).join("");
        return result;
      }
      if (val!="") {
        var rule = ruleInfo.rule;
        for (var i = 0; i < rule.length; i++) {
          switch (rule[i].reg) {
            case "empty":
              result.status = !util.Reg.isEmpty(val);
              break;
            case "int":
              result = this._int(val,rule[i]);     //必須為int型
              break;
            case "number":
              result.status = !isNaN(val);
              break;
            case "username":
              result = this._userName(val);
              break;
            case "chinesename":
              result.status = util.Reg.isInt(val);
              break;
            case "mobile":
              result.status = util.Reg.isMobile(val);
              break;
            case "tel":
              result.status = util.Reg.isTel(val);
              break;
            case "email":
              result.status = util.Reg.isEmail(val);
              break;
            case "demail":
              result.status = util.Reg.isDomainEmail(val);
              break;
            case "domain":
              result.status = util.Reg.isDomain(val);
              break;
            case "ip":
              result.status = util.Reg.isIp(val);
              break;
            case "smtp":
              result.status = util.Reg.isSmtp(val);
              break;
            case "compare":
              result.status =(val==$(rule[i].compare).val()?true:false);
              break;
          }
          result.errMsg = !result.errMsg?rule[i].errMsg:result.errMsg;   //如果沒有錯誤信息,就用用戶傳入的錯誤信息
        }
      }
      return result;
    },
    _int:function(val,rule){
      var result = {
        "status":true
      };
      if(!util.Reg.isInt(val)){    //如果不是數字,就直接返回false
        result.status=false;
        return result;
      }
      if (val!="" && (rule.maxValue || rule.minValue)) {   //數字不能大於最大值,小於最小值
        var iVal = parseInt(val);
        if (iVal > rule.maxValue) {
          result.errMsg = "最大值不能超過" + rule.maxValue;
          result.status = false;
        }
        else if (iVal < rule.minValue) {
          result.errMsg = "最小值不能小於" + rule.minValue;
          result.status = false;
        }
      }
      return result;
    },
    _userName:function(val){
      var result ={status:true,errMsg:""};
      if(val.length<2){
        result.status=false;
        result.errMsg="用戶名最小長度為2";
      }else if(val.length > 20){
        result.status=false;
        result.errMsg="用戶名最大長度為20";
      }else if(util.Reg.isHaveChinese(val)){
        result.status=false;
        result.errMsg="用戶名不能包含中文";
      }
      else if(!util.Reg.netname(val)){
        result.status = false;
        result.errMsg = "帳號不合法";
      }
      return result;
    }
  },  
    //添加密碼框下面的安全級別提示的HTML
  _addPasswordHtml:function(element){
    var passwordHtml = '<div class="verify-message pass_str" data-role="message">'
      +'<div class="pass_str_txt"><strong></strong>密碼安全度:</div>'
        +'<div class="pass_str_line"><div class="pass_str_bar"></div></div>'
          +'<div class="pass_str_tips"></div></div>'
    element.after(passwordHtml);
  },
  //顯示錯誤信息
  _showMessage:function(element,message,position){
    element.addClass("erro-input");
    var rule = hash_rule[element.attr("guid")] || {"position":"right"};
    var position = position?position:(rule.position || "right");
    if (!element.next().hasClass("errortip")) {   //如果元素的下一個元素沒有errortip類
      element.parents("div:eq(0)").addClass("p_relative");
      var top ="px";
      var left ="0px";
      if(position=="down"){
        top = element.position().top+element.height()+10+"px";   //position() 方法返回匹配元素相對於父元素的位置(偏移)。該方法返回的對象包含兩個整型屬性:top 和 left,以像素計。此方法只對可見元素有效。

        left = (element.position().left-5)+"px";
      }else{
        top = element.position().top+"px";
        left = (element.position().left+element.width()+20)+"px";
      }
      element.after('<div class="errortip ml_5" style="top:'+top+';left:'+left+'">'+message+'</div>');

    }else{
      element.next().hasClass("errortip")?element.next().html(message):"";
    }
  },
  //隱藏錯誤信息
  _hideMessage:function(element){
    if (element.prop("tagName") == "UL") {
      element.parent().removeClass("erro-input");
      element.parents("div:eq(1)").find(".errortip").remove();
    }
    else {
      element.parent().find(".errortip").remove();
      element.removeClass("erro-input");
    }
  },
  //得到整個驗證的狀態,是否驗證通過
  getVerifyStatus:function(){
    var status =true;;
    for(var i = 0 ;i<this.checkItem.length;i++){
      var _element = $(this.checkItem[i].element);
      if(this.checkItem[i].rule[0].reg == "no"){   //如果元素本身不需要驗證,那么驗證它的子元素
        _element = $(this.checkItem[i].rule[0].childElement);
      } //過濾掉本身不需要檢驗的元素
      if (_element.attr("type")) {
        if (!this.event._blur(_element, this)) {   //如果元素沒有通過驗證,就返回false
          status = false;
        }
      }
      else{
        var tarName = _element.prop("tagName");
        switch(tarName){
          case "UL":
            var checkResult = this.check._List(_element) ;   //如果驗證的元素是ul,則需要驗證它是否有子元素,如果有,就返回true,沒有就返回false
            if(!checkResult.status){
              this._showMessage(_element.parents("div:eq(0)"),checkResult.errMsg);
              status =false;
            }
            break;
          case "DIV":
            break;
        }
      }
    }
    if(this.verifyCallback){   //如果有回調函數
      var result = this.verifyCallback();   //就執行此回調函數
      if(!result.status){    //如果回調函數返回的狀態為false,就顯示錯誤
        this._showMessage($(result.element),result.errMsg);
        status = false;
      }
    }
    return status
  },
  //得到指定文本框的驗證狀態,第一個參數是驗證的對象,第二個參數代表是否顯示錯誤信息
  getSingStatus :function(element,isShowErr){
    var result = this.check._Input(element,hash_rule[$(element).attr("guid")]);
    if(!result.status && isShowErr){
      this._showMessage($(element),result.errMsg);
    }
    return result.status;
  },
  //將寫在文本框上的驗證轉換成JSON 然后解析;
  html2Json:function(){
    var checkItem = [];
    $("[reg]").each(function(){    //對頁面上所有具有reg屬性的元素進行處理
      var other = {
        "reg":$(this).attr("reg"),
        "errMsg":$(this).attr("errmsg")
      }
      if($(this).attr("maxValue")){
        other.maxValue=$(this).attr("maxValue");
      }
      if($(this).attr("minValue")){
        other.minValue=$(this).attr("minValue");
      }
      if($(this).attr("compare")){
        other.compare = $(this).attr("compare");
      }
      var rule = {
        "element":$(this),
        "position":$(this).attr("position") || "right",
        "required":!($(this).attr("required")?true:false),  //如果此元素的required = false,那么就設置rule.required = true,就規定此元素不能為空。如果此元素的required = true,那么就設置rule.required = false。
        "rule":[other]
      }
      if(other.reg=="empty"){   //如果元素的reg屬性值為empty,那么就規定此元素不能為空
        rule.required=true;
      }
      checkItem.push(rule);
    })
    return checkItem;
  },
  //密碼的處理機制
  PwdCheck: function (spwd, o) {      //這里的o = {pwdMinLen: 6,pwdMaxLen: 30,pwdCheckType: 1},spwd為密碼框中的值

    var p = this;
    var NotContains = p.NotContains;   //密碼框中的值不能包括NotContains對象中定義的屬性值

    p.sLevel = o.pwdCheckType;     //1
    p.VdPassword = {};

    p.VdPassword.pwdMinLen = o.pwdMinLen;     //6
    p.VdPassword.pwdMaxLen = o.pwdMaxLen;    //30
    p.VdPassword.level = o.pwdCheckType;    //1
    //獲取密碼框中的值
    var spwd = spwd;
    var dic = [
      "123456",
      "12345",
      "123456789",
      "password",
      "iloveyou",
      "rockyou",
      "1234567",
      "12345678",
      "abc123",
      "654321",
      "iloveu",
      "111111",
      "0"
    ];     

    String.prototype.LTrim = function () {
      return this.replace(/(^\s*)/g, "");
    }
    String.prototype.RTrim = function () {
      return this.replace(/(\s*$)/g, "");
    }
    String.prototype.Trim = function () {
      return this.replace(/(^\s*)|(\s*$)/g, "");
    }
    String.prototype.replaceAll = function (s1, s2) {
      return this.replace(new RegExp(s1, "gm"), s2);
    }
    function getReturnValue(sLevel, sNcode) {   //當密碼框為空時,這里傳入的是0,1。如果密碼長度小於6,大於30,傳入0,9。如果密碼是常用的簡單密碼,傳入0,2。密碼為純數字,傳入1,0.密碼包含中文,傳入0,6.如果密碼包含了空格,傳入0,10.如果都不屬於前面的情況,那么就傳入undefined,0,這時sLevel為2或者3.
      if (sLevel == 0) {
        sLevel = 0;
      }
      else if (sLevel != 0) {
        //如果合法, 根據[字母,特殊字符,數字]得到密碼的強度
        sLevel = getStrongLevel(spwd);    //如果密碼有字母,特殊字符,數字三種,就返回3,有兩種,就返回2,只有一種就返回1
      }
      var ret = {
        SafeLevel: sLevel,
        NotifyCode: sNcode
      };
      p.VdPassword.SafeLevel = sLevel;
      p.VdPassword.NotifyCode = sNcode;
      return setMsg(sNcode, sLevel);

    }

    //設置密碼驗證后的提示信息
    function setMsg(sNcode, sLevel) {    //如果密碼框為空,這里傳入的是1,0。如果密碼長度小於6大於30,這里是9,0。如果輸入的密碼是常用的簡單密碼,就傳入2,0.如果密碼為純數字,這里傳入0,1.如果密碼包含中文,傳入6,0.如果密碼包含空格,傳入10,0.如果前面的都不匹配,就代表密碼沒問題,傳入0,2(或3)。

      if(sNcode<9 || sNcode==10){
        p.VdPassword.msg = App.$LANG("control.verify.pass_msg"+sNcode);
      }
      else if(sNcode == 9){
        p.VdPassword.msg =util.text.format(App.$LANG("control.verify.pass_msg9"),p.VdPassword.pwdMinLen, p.VdPassword.pwdMaxLen);
      }
      if (sNcode != 0) {     
        p.VdPassword.status = false;    //返回false狀態

        return p.VdPassword;
      }

      //如果沒有錯誤,但安全強度沒有達到我們設置的要求,則返回false,並且提示用戶,你輸入的密碼太簡單了,等級太低了。
      if (sNcode == 0 && sLevel < p.sLevel) {
        var mustLevel = p.sLevel;
        p.VdPassword.msg = App.$LANG("control.verify.pass_type_"+mustLevel);
        p.NotifyCode = 10;
        p.VdPassword.status = false;
        return p.VdPassword;
      } else if (sNcode == 0) {
        p.NotifyCode = 0;
        p.VdPassword.msg = "";
        p.VdPassword.status = true;     //返回true
        return p.VdPassword;
      }

    }

    function isTrim(s){
      if(s.replace(/ /g,"").length!=s.length){
        return true;
      }else return false;
    }

    function getPwdProperty(pwd) {
      var hasNum = false;
      var hasLetter = false;
      var hasSymbol = false;
      var s = pwd.toLowerCase();
      var numStrs = "0123456789";
      var letterStrs = "abcdefghijklmnopqrstuvwxyz";
      var symbolStrs = "~!@#$%^&*()_-=+{}[]:\"|<>?,./;'\\";
      var ch = "";
      //判斷是否有數字
      for (var i = 0; i < s.length; i++) {
        ch = s.substr(i, 1);
        if (numStrs.indexOf(ch) != -1) {
          hasNum = true;
          break;
        }
      }
      //判斷是否有字母
      for (var i = 0; i < s.length; i++) {
        ch = s.substr(i, 1);
        if (letterStrs.indexOf(ch) != -1) {
          hasLetter = true;
          break;
        }
      }
      //判斷是否有特殊符號
      for (var i = 0; i < s.length; i++) {
        ch = s.substr(i, 1);
        if (symbolStrs.indexOf(ch) != -1) {
          hasSymbol = true;
          break;
        }
      }
      var ret = {
        HasNum: hasNum,
        HasLetter: hasLetter,
        HasSymbol: hasSymbol
      };
      return ret;
    };

    function getStrongLevel(pwd) {
      var pro = getPwdProperty(pwd);
      var hasNum = pro.HasNum;
      var hasLetter = pro.HasLetter;
      var hasSymbol = pro.HasSymbol;

      //沒有數字,沒有特殊字符,
      if ((!hasNum) && (!hasSymbol)) {
        return 1;
      }
      //沒有數字,沒有字母
      if ((!hasNum) && (!hasLetter)) {
        return 1;
      }

      //沒有字母, 沒有特殊字符
      if (!(hasSymbol) && !(hasLetter)) {
        return 1;
      }
      //有數字,有字母,沒特殊字符
      if ((hasNum) && (hasLetter) && (!hasSymbol)) {
        return 2;
      }
      //有數字,沒有字母,有特殊字符
      if ((hasNum) && (!hasLetter) && (hasSymbol)) {
        return 2;
      }
        //沒有數字,有字母,有特殊字符
      if ((!hasNum) && (hasLetter) && (hasSymbol)) {
        return 2;
      }
      if (hasNum && hasLetter && hasSymbol) {
        return 3;
      }
      return 3;
    };

    var level; //密碼的安全度 [ 弱 普通 安全 ]

    /* 1.輸入為空,直接返回安全度為 [ 0 ] */
    if (spwd == "") {
      level = 0;
      ncode = 1;
      return getReturnValue(level, ncode);
    }
    /* 2.如果小於6或者大於30,密碼長度不對,返回安全度為[ 0 ] */
    if (spwd.length < parseInt(p.VdPassword.pwdMinLen) || spwd.length > parseInt(p.VdPassword.pwdMaxLen)) {

      level = 0;
      ncode = 9;

      return getReturnValue(level, ncode);
    }

    var smppwd = spwd;   //密碼框中的值
    var dicpwd; 
    for (var i = 0; i < dic.length; i++) {
      smppwd = spwd;
      dicpwd = dic[i];
      // 3.如果密碼為常用的簡單密碼, 返回安全度為[ 0 ]
      if (smppwd == dicpwd) {
        level = 0;
        ncode = 2;
        return getReturnValue(level, ncode);
      }
    }

      /* 4.[ NotContains : 密碼不能等於這個對象的屬性 ] */
    if (NotContains) {
      if (NotContains.Account) {
        if (spwd == NotContains.Account) {
          level = 0;
          ncode = 3;
          return getReturnValue(level, ncode);
        }
      }
      if (NotContains.Mobile) {
        if (spwd == NotContains.Mobile) {
          level = 0;
          ncode = 3;
          return getReturnValue(level, ncode);
        }
      }
      if (NotContains.Alias) {
        if (spwd == NotContains.Alias) {
          level = 0;
          ncode = 3;
          return getReturnValue(level, ncode);
        }
      }
    }

    if (!/\D/.test(spwd)) { //5.密碼為純數字
      level = 1;
      ncode = 0;
      return getReturnValue(level, ncode);
    }

    if (/.*[\u4e00-\u9fa5]+.*$/.test(spwd)) {     // 6.包含了中文
      level = 0;
      ncode = 6;
      return getReturnValue(level, ncode);
    }

    if(isTrim(spwd)){   //7.包含空格
      level=0;
      ncode=10;
      return getReturnValue(level, ncode);
    }
    getReturnValue(level, 0);
    return p.VdPassword;
  }
};

代碼中有一些調用了工具類util中的方法,將在下一個插件util中講解。

 

 

 

加油!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM