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>

学无止境,谦卑而行.

目录
相关文章
|
前端开发 应用服务中间件 nginx
|
6月前
|
移动开发 开发框架 前端开发
前端组件库Taro UI知识点大全(一)
教程来源 https://yyvgt.cn/category/jiuwenhua.html Taro UI是京东凹凸实验室打造的Taro多端框架专用UI组件库,支持微信/支付宝/百度小程序、H5及React Native。提供50+开箱即用组件,支持全局/按需引入与主题定制,显著提升跨端开发效率。
|
人工智能 算法 芯片
天天都在说的“算力”到底是个啥?一文全讲透!
算力是数字经济发展的重要支撑,尤其在AI和大数据应用中起着关键作用。阿里云致力于构建全球领先的算力基础设施,助力各行业数字化转型。吴泳铭和马云均强调了算力在未来科技竞争中的核心地位。2023年底,我国算力总规模达230EFLOPS,位居全球第二。算力分为通用、智能和超算算力,广泛应用于人工智能训练与推理等场景。中国正加速建设智算中心,推动算力产业链发展,并注重绿色低碳和智能运维,以应对日益增长的计算需求。
28787 19
|
前端开发 JavaScript 容器
使用echarts遇到的问题及解决
使用echarts遇到的问题及解决
1416 0
|
存储 缓存 固态存储
|
开发框架 Java 数据库
Spring Boot集成多数据源的最佳实践
Spring Boot集成多数据源的最佳实践
|
JSON JavaScript 数据格式
Vue路由params、query参数丢失解决
该文章介绍了在Vue中使用`params`和`query`进行路由参数传递时,如何通过`sessionStorage`或`localStorage`解决参数丢失的问题。
1170 3
|
存储 关系型数据库 MySQL
PolarDB产品使用问题之如何进行私有化部署PolarDB-X
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
移动开发 JavaScript 前端开发
JS中页面跳转的几种方法
JS中页面跳转的几种方法
2347 2