你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

04 登录校验,引入Message消息提示

2021/12/25 4:27:11

1 参数校验

(1)用户名校验

        规则:用户名必须是6-10位之间的字母

        正则表达式

[A-Za-z]{6,10}

写个java代码验证下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {
    public static void main(String[] args) {
        // 6-10位之间的字母
        String regex = "[A-Za-z]{6,10}";
        isMatch(regex, "abcdefghijk");
        isMatch(regex, "abcde");
        isMatch(regex, "abcdefghij");
        isMatch(regex, "abcdef");
        isMatch(regex, "abcdefg");
        isMatch(regex, "1bcdef");
    }

    private static void isMatch(String regex, String str) {
        Pattern pa = Pattern.compile(regex);
        Matcher matcher = pa.matcher(str);
        boolean matches = matcher.matches();
        System.out.println("字符是:" + str + ",是否匹配:" + matches + ",字符长度为" + str.length());
    }
}

验证结果如下:

 (2) 密码校验

           规则:至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符

           正则表达式如下

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}

 写个java代码验证下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {
    public static void main(String[] args) {
        // 6-10位之间的字母
        String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{8,}";
        isMatch(regex, "aaaaaaa");
        isMatch(regex, "aaaaaaaa");
        isMatch(regex, "aAaaaaaa");
        isMatch(regex, "aA@aaaaa");
        isMatch(regex, "aA@1aaaa");
    }

    private static void isMatch(String regex, String str) {
        Pattern pa = Pattern.compile(regex);
        Matcher matcher = pa.matcher(str);
        boolean matches = matcher.matches();
        System.out.println("字符是:" + str + ",是否匹配:" + matches + ",字符长度为" + str.length());
    }
}

验证结果如下:

 (3) 编写前端校验代码

 查看elementui官网,校验input框

 查看官网源代码:

 

发现官网的数据校验,都是比较简单的校验,那如何自定义校验呢,再来查看官网

 

接下来改我们的登录页面代码:

 此时,登陆页面完整代码为

<template>
  <div id="login">
    <h2>小高后台管理系统-登录</h2>
    <el-form ref="form" :model="form" :rules="rules" label-width="80px">
      <el-form-item label="用户名" prop="username">
        <el-col :span="18">
          <el-input v-model="form.username"></el-input>
        </el-col>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-col :span="18">
          <el-input v-model="form.password" type="password"></el-input>
        </el-col>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSubmit('form')">登录</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    const validateUsername = (rule, value, callback) => {
      const pattern = /[A-Za-z]{6,10}/;
      if (value !== "") {
        if (!pattern.test(value)) {
          callback(new Error("请输入正确的用户名"));
        } else {
          callback();
        }
      } else {
        callback(new Error("请输入用户名"));
      }
    };
    const validatePassword = (rule, value, callback) => {
      const pattern =
        /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}/;
      if (value !== "") {
        if (!pattern.test(value)) {
          callback(new Error("请输入正确的密码"));
        } else {
          callback();
        }
      } else {
        callback(new Error("请输入密码"));
      }
    };
    return {
      form: {
        username: "",
        password: "",
      },
      rules: {
        username: [
          { required: true, validator: validateUsername, trigger: "blur" },
        ],
        password: [
          { required: true, validator: validatePassword, trigger: "blur" },
        ],
      },
    };
  },
  methods: {
    onSubmit(form) {
      this.$refs[form].validate((valid) => {
        if (valid) {
          console.log("submit!", this.form.username, this.form.password);
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
  },
};
</script>

<style scoped>
#login {
  position: absolute;
  width: 400px;
  height: 260px;
  top: 50%;
  left: 50%;
  margin-top: -130px;
  margin-left: -200px;
  border: 1px solid lightgrey;
}
h2 {
  text-align: center;
}
</style>

 页面效果为

2 引入Message消息提示

登录成功或者规则校验失败,给个消息提示吧,console不需要打日志了

查看elementui官网

 查看源代码,如下:

 在我们登录页面,也引入,如下:

效果如下

 但是错误一般input框下提示,message就不用提示了所以我们可以再规则校验失败的时候,不再提示message

 再看下页面效果,完美

 接下来,就发送axios请求,请求后台接口,登录接口联调了