• 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-Zd]+$)(?![A-Z_!@#$%^&*`~()-+=]+$)(?![a-zd]+$)(?![a-z_!@#$%^&*`~()-+=]+$)(?![d_!@#$%^&*`~()-+=]+$)[a-zA-Zd_!@#$%^&*`~()-+=]{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>
    
    学无止境,谦卑而行.
  • 相关阅读:
    MySQL数据库审计(server_audit)
    freemarker处理null数据的变量
    漫画链接: https的原理
    ipad的goodnotes做笔记一键拷贝到mac的obsidian
    在neovim/vim中搜索所有的markdown标题
    在vim/nvim中快速输入latex数学公式(markdown)
    lua的学习路线
    mac上的宝藏软件: 免费开源的pdf viewer: skim(可替代preview, 演示pdf, 像幻灯片播放)
    vimgutentags: 文档没有告诉你的事: 何时update整个project, 何时update单个文件?
    zsh相比bash在写脚本上的优点: 对空格的处理
  • 原文地址:https://www.cnblogs.com/wangyang0210/p/14952329.html
Copyright © 2020-2023  润新知