前端秃头党@IT·互联网

vue 复杂密码校验

2023-12-24  本文已影响0人  flyinskybiu

针对复杂密码


checkPassword(rule, value, callback) {

      this.level = [];

      if (!value) {

        return callback("密码不能为空");

      }

      if (value.length < 8) {

        return callback("密码不少于8位");

      }

      if (value.length > 20) {

        return callback("密码不大于20位");

      }

      // 校验是数字

      const regex1 = /^\d+$/;

      // 校验字母

      const regex2 = /^[A-Za-z]+$/;

      // 校验符号

      const regex3 = /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、]+$/;

      const isLowerCase = /^.*[a-z]+.*/;

      const isUpperCase = /^.*[A-Z]+.*/;

      const regEx = /^.*[^a-zA-Z0-9]+.*/;

      var num = 0;

      if (regex1.test(value)) {

        num = num + 1;

      }

      if (isLowerCase.test(value)) {

        num = num + 1;

      }

      if (isUpperCase.test(value)) {

        num = num + 1;

      }

      if (regEx.test(value)) {

        num = num + 1;

      }

      var numberSequence = false;

      for (var i = 0; i < value.length - 3; i++) {

        if (!regex1.test(value.substring(i, i + 1)) || !regex1.test(value.substring(i + 1, i + 2) + "") || !regex1.test(value.substring(i + 2, i + 3) + "") || !regex1.test(value.substring(i + 3, i + 4) + "")) {

          continue;

        }

        var no1 = Number(value.substring(i, i + 1));

        var no2 = Number(value.substring(i + 1, i + 2));

        var no3 = Number(value.substring(i + 2, i + 3));

        var no4 = Number(value.substring(i + 3, i + 4));

        if (no1 + 1 == no2 && no2 + 1 == no3 && no3 + 1 == no4) {

          numberSequence = true;

        }

        if (no2 + 1 == no1 && no3 + 1 == no2 && no4 + 1 == no3) {

          numberSequence = true;

        }

      }

      if (numberSequence) {

        // $.messager.alert("错误","密码中不能包含有连续四位及以上顺序(或逆序)数字(如:密码中不能包含1234或3210等)。");

        // falg = '密码中不能包含有连续四位及以上顺序(或逆序)数字(如:密码中不能包含1234或3210等';

        return callback('密码中不能包含有连续四位及以上顺序(或逆序)数字(如:密码中不能包含1234或3210等');;

      }

      else if (num <= 2) {

        //$.messager.alert("错误","密码复杂度不足,\n(1)大写字母\n(2)小写字母\n(3)数字\n(4)特殊符号\n密码至少需包含上述情形中的三种.");

        // flag = '密码复杂度不足,\n(1)大写字母\n(2)小写字母\n(3)数字\n(4)特殊符号\n密码至少需包含上述情形中的三种';

        return callback('密码复杂度不足,\n(1)大写字母\n(2)小写字母\n(3)数字\n(4)特殊符号\n密码至少需包含上述情形中的三种');

      }

      else if (regex1.test(value)) {

        this.level.push("low");

        return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");

      } else if (regex2.test(value)) {

        this.level.push("low");

        return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");

      } else if (regex3.test(value)) {

        this.level.push("low");

        return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");

      } else if (/^[A-Za-z\d]+$/.test(value)) {

        this.level.push("low");

        this.level.push("middle");

        return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");

      } else if (

        /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、\d]+$/.test(value)

      ) {

        this.level.push("low");

        this.level.push("middle");

        return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");

      } else if (

        /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、A-Za-z]+$/.test(

          value

        )

      ) {

        this.level.push("low");

        this.level.push("middle");

        return callback("设置8至20位包含大小写字母、数字、特殊符号的密码");

      } else if (

        /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、A-Za-z\d]+$/.test(

          value

        )

      ) {

        this.level.push("low");

        this.level.push("middle");

        this.level.push("high");

      }

      return callback();

    },

使用方法
rules: {

         password: [

              { required: true, validator: this.checkPassword, trigger: "blur" },

            ] ,

      },

上一篇 下一篇

猜你喜欢

热点阅读