Antd——表单使用自定义正则进行校验

简介: Antd——表单使用自定义正则进行校验

前言

Ant Design of Vue中的表单如何使用自定义正则进行校验

内容

效果

代码

<template>
     <!--省略代码-->
     <div @click="changePassword">
      <a-icon style="margin-right: 8px" type="edit" />
      <span>修改密码</span>
    </div>
    <!--省略代码-->
    <a-modal
        title="修改密码"
        :visible="createDialogVisible"
        @ok="modelConfirm"
        @cancel="modalCancel"
    >
      <a-form-model
          ref="passwordFrom"
          :model="form"
          :rules="rules"
          :label-col="labelCol"
          :wrapper-col="wrapperCol"
      >
        <a-form-model-item
            ref="password"
            label="旧密码"
            prop="password"
        >
          <a-input-password
              v-model="form.password"
              placeholder="旧密码"
          />
        </a-form-model-item>
        <a-form-model-item
            ref="newPassword"
            label="新密码"
            prop="newPassword"
        >
          <a-input-password
              v-model="form.newPassword"
              placeholder="新密码"
          />
        </a-form-model-item>
        <a-form-model-item
            ref="reNewPassword"
            label="确认密码"
            prop="reNewPassword"
        >
          <a-input-password
              v-model="form.reNewPassword"
              placeholder="请再次输入新密码"
          />
        </a-form-model-item>
      </a-form-model>
    </a-modal>
  </a-layout-header>
</template>
<script>
export default {
  data() {
    return {
      labelCol: { span: 4 },
      wrapperCol: { span: 14 },
      form: {
        password: "",
        newPassword: "",
        reNewPassword: "",
        _id: "",
      },
      rules: {
        password: [
          { required: true, message: "请输入旧密码", trigger: "blur" },
        ],
        newPassword: [
          { required: true, message: "请输入新密码", trigger: "change" },
          // 表单自定义校验
          { validator: this.checkPassword }
        ],
        reNewPassword: [
            { required: true, message: "请再次输入新密码", trigger: "change" },
            { validator: this.checkPassword }
        ]
      },
      createDialogVisible: false,
      searchActive: false,
    };
  },
  methods: {
    // 校验密码复杂度
    checkPassword(rule, value, callback) {
      if (value && !/^(?![a-zA-Z]+$)(?![A-Z\d]+$)(?![A-Z_!@#$%^&*`~()-+=]+$)(?![a-z\d]+$)(?![a-z_!@#$%^&*`~()-+=]+$)(?![\d_!@#$%^&*`~()-+=]+$)[a-zA-Z\d_!@#$%^&*`~()-+=]{8,16}$/.test(value)) {
        callback(new Error('密码为数字,小写字母,大写字母,特殊符号 至少包含三种,长度为 8 - 16位'))
      }
      // 回调一定不要忘记了
      callback()
    },
    // 修改密码
    changePassword() {
      this.createDialogVisible = true;
    },
    // model 确认按钮
    modelConfirm() {
      this.$refs.passwordFrom.validate((valid) => {
        if (valid) {
          // 只做前端进行判断两次密码输入是否一致 | 后端不进行判断 [我也不清楚咋想的]
          if (this.form.newPassword !== this.form.reNewPassword) {
            this.$message.error('您两次输入的新密码不一致,请检查后重新输入'); return
          }
          this.form._id = JSON.parse(localStorage.getItem('userInfo')).user._id
          let payload = {
            data: {
              ...this.form,
            },
          };
          this.$mqtt.doPublish(
              {
                pubTopic: "<topic>",
                payload,
              },
              (topic, data) => {
                if (data.code == 200) {
                  this.$message.success("密码更新成功");
                  this.logout()
                }
                if (data.code == 1002 ) {
                  this.$message.error("您输入的旧密码错误");
                  this.modalCancel()
                }
                if (data.code == 1022 ) {
                  this.$message.error("您输入的密码复杂度不满足");
                  this.modalCancel()
                }
                if (data.code == 1000 ) {
                  this.$message.error("卧槽,您的账号竟然不存在~");
                  this.createDialogVisible = false;
                }
              },
              this
          );
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
    // model 取消按钮
    modalCancel() {
      this.$refs.passwordFrom.resetFields();
      this.createDialogVisible = false;
    },
    // 退出登录
    logout() {
      logout();
      this.$router.push("/login");
    }
  },
};
</script>

学无止境,谦卑而行.

目录
相关文章
|
6月前
uniapp的form表单自定义验证规则
uniapp的form表单自定义验证规则
261 0
|
JavaScript 数据格式
JS中操作表单元素与正则表达式校验表单
JS中操作表单元素与正则表达式校验表单
73 0
|
JavaScript
VUE element-ui之form表单自定义验证11位手机号码(封装验证规则)
VUE element-ui之form表单自定义验证11位手机号码(封装验证规则)
3447 0
VUE element-ui之form表单自定义验证11位手机号码(封装验证规则)
|
3月前
|
JavaScript 数据安全/隐私保护
Vue中如何使用过滤器来隐藏手机号、邮箱等字符串的中间部分内容
这篇文章介绍了在Vue中如何使用过滤器来隐藏手机号和邮箱等字符串的中间部分内容,以提高隐私保护。文章展示了实现效果,并提供了实现过程的代码示例,包括HTML部分的绑定、data部分的数据定义和script部分的过滤器定义。文章还解释了过滤器的概念、语法和使用方式,并提供了一个外部链接供读者获取更加详细的过滤器知识。
|
3月前
|
前端开发 JavaScript 数据安全/隐私保护
前端JS正则校验密码之3种实现方式
这篇文章展示了三种使用JavaScript正则表达式来校验密码的方法,密码需要满足包含大写字母、小写字母、数字及特殊字符,并在8到16位之间,同时提供了示例代码和实现效果。
102 1
前端JS正则校验密码之3种实现方式
|
3月前
ElementUI——表单使用自定义验证导致无法提交
ElementUI——表单使用自定义验证导致无法提交
27 2
|
5月前
|
前端开发 数据安全/隐私保护
vue3表单参数校验+正则表达式
vue3表单参数校验+正则表达式
|
6月前
|
JavaScript
vue实现多个el-form表单提交统一校验的2个方法
vue实现多个el-form表单提交统一校验的2个方法
504 0
|
6月前
有关elementUI el-form表单配置了校验规则但是反向校验问题
有关elementUI el-form表单配置了校验规则但是反向校验问题
84 2
|
JavaScript
js:邮箱校验正则
js:邮箱校验正则
106 0