vue使用rules进行格式校检

使用rules进行表单属性格式校检

目录

  1. 创建validtor.js文件
  2. 每个属性加上prop=“xxx”
  3. 引用对应的格式校检方法

创建validator.js文件

  1. 在src目录下创建一个validator.js文件
  2. 以下是validator.js的部分常用方法
// 验证ip
export function validateIP(rule, value, callback) {
    if (value == '' || value == undefined || value == null) {
        callback();
    } else {
        const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
        if ((!reg.test(value)) && value != '') {
            callback(new Error('请输入正确的IP地址'));
        } else {
            callback();
        }
    }
}

//   验证电话号码
export function validatePhone(rule, value, callback) {
    const reg = /^[1][3-9][0-9]{9}$/;
    if (value == '' || value == undefined || value == null) {
        callback();
    } else {
        if ((!reg.test(value)) && value != '') {
            callback(new Error('请输入正确的电话号码'));
        } else {
            callback();
        }
    }
}


//   两位小数验证
const validateValidity = (rule, value, callback) => {
    if (!/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) {
        callback(new Error('最多两位小数!!!'));
    } else {
        callback();
    }
};
//   密码校检
export const validatePsdReg = (rule, value, callback) => {
    if (!value) {
        return callback(new Error('请输入密码'))
    }
    if (!/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,10}$/.test(value)) {
        callback(new Error('请输入6-10位字母、数字或者符号组合'))
    } else {
        callback()
    }
};

//   纯数字校检
export const validateNumber = (rule, value, callback) => {
    let numberReg = /^\d+$|^\d+[.]?\d+$/;
    if (value !== '') {
        if (!numberReg.test(value)) {
            callback(new Error('请输入纯数字'))
        } else {
            callback()
        }
    } else {
        callback(new Error('请输入值'))
    }
};
// 姓名校检
export const validateName = (rule, value, callback) => {
    let reg=/^[\u2E80-\u9FFF]+$/;//Unicode编码中的汉字范围
    if (value && value.length > 0) {
        if(!reg.test(value)){
            callback([new Error('姓名输入不合法')]);
        }else{
            callback();
        }
    }else if(value.length == 0){
        callback();
    } else {
        callback(new Error('姓名输入不合法'));
    }
}

将表单里面的每个属性进行pron的绑定

  1. 将表单进行校检的双向绑定
 <el-form :model="psdform" :rules="rules">
  1. 将属性就行绑定
<el-form-item :label-width="formLabelWidth" label="请输入工号" prop="num">
<el-form-item :label-width="formLabelWidth" label="请输入手机号" prop="phone">

以下是表单的完整代码

 <el-form :model="psdform" :rules="rules">
                    <el-form-item :label-width="formLabelWidth" label="请输入工号" prop="num">
                        <el-input @keyup.enter.native="forgetPsd" autocomplete="off" maxlength="12" name="num"
                                  v-model="psdform.username"></el-input>
                    </el-form-item>
                    <el-form-item :label-width="formLabelWidth" label="请输入手机号" prop="phone">
                        <el-input @keyup.enter.native="forgetPsd" autocomplete="off" name="phone"
                                  v-model="psdform.phone"></el-input>
                    </el-form-item>
                </el-form>

在当前需要就行校检的文件导入对应的校检方法

  1. 导入方法(导入时注意validator.js文件的存放路径)
    import {validateNumber, validatePhone} from "../validator.js"
  1. 调用对应的校检方法
              rules: {
                    username: [
                        {required: true, message: "账号不可为空", trigger: "blur"},
                        {type: "string", min: 12, message: "账号是12位纯数字"},
                        {validator: validateNumber}
                    ],
                   phone: [
                        {required: true, message: "电话不可为空", trigger: "blur"},
                        {type: "string",},
                        {validator: validatePhone}
                    ]
                },

方便白嫖给出整个页面的代码

<template>
    <div class="login">
        <!-- 背景视频 -->
        <video autoplay id="video-bg" loop muted src="../../public/imgs/bg.mp4"></video>
        <!-- 登录框 -->
        <div class="login-container">
            <el-form :model="form" :rules="rules" class="login-box" label-width="80px" ref="loginForm">
                <h2 class="login-title">赣南医学院体育后台管理</h2>
                <el-form-item class="login_input" label="账号" prop="username" style="width: 91%;">
                    <el-input
                            @keyup.enter.native="onSubmit()"
                            autocomplete="off"
                            maxlength="12"
                            placeholder="请输入账号"
                            suffix-icon="el-icon-user-solid"
                            type="text"
                            v-model="form.username"
                    />
                </el-form-item>
                <el-form-item label="密码" prop="password" style="width: 91%;">
                    <el-input
                            @keyup.enter.native="onSubmit()"
                            maxlength="10"
                            placeholder="请输入密码"
                            show-password
                            type="password"
                            v-model="form.password"
                    />
                </el-form-item>
                <el-button @click="dialogFormVisible = true" class="forgetpsd" type="text">忘记密码</el-button>
                <el-form-item>
                    <el-button style="width:88%;" type="primary" v-on:click="onSubmit()">登录</el-button>
                </el-form-item>
            </el-form>
            <!-- 忘记密码弹窗 -->
            <el-dialog :visible.sync="dialogFormVisible" title="忘记密码">
                <el-form :model="psdform" :rules="rules">
                    <el-form-item :label-width="formLabelWidth" label="请输入工号" prop="num">
                        <el-input @keyup.enter.native="forgetPsd" autocomplete="off" maxlength="12" name="num"
                                  v-model="psdform.username"></el-input>
                    </el-form-item>
                    <el-form-item :label-width="formLabelWidth" label="请输入手机号" prop="phone">
                        <el-input @keyup.enter.native="forgetPsd" autocomplete="off" name="phone"
                                  v-model="psdform.phone"></el-input>
                    </el-form-item>
                </el-form>
                <div class="dialog-footer" slot="footer">
                    <el-button @click="dialogFormVisible = false">取 消</el-button>
                    <el-button
                            :disabled="!psdform.username||!psdform.phone"
                            @click="forgetPsd()"
                            type="primary"
                    >确 定
                    </el-button>
                </div>
            </el-dialog>
        </div>
    </div>
</template>

<script>
    import "../../public/css/login.css";
    import $ from "../../public/js/jquery-3.3.1";
    import {validateNumber, validatePsdReg, validatePhone} from "../validator.js"
    import Qs from 'qs'
    export default {
        name: "Login",
        data() {
            return {
                //   用户名 密码
                form: {
                    username: "",
                    password: ""
                },
                // 表单验证,需要在 el-form-item 元素中增加 prop 属性
                rules: {
                    username: [
                        {required: true, message: "账号不可为空", trigger: "blur"},
                        {type: "string", min: 12, message: "账号是12位纯数字"},
                        {validator: validateNumber}
                    ],
                    password: [
                        {required: true, message: "密码不可为空", trigger: "blur"},
                        {type: "string", min: 6, message: "请输入6-10位字母、数字或者符号组合"},
                        {validator: validatePsdReg}
                    ],
                    phone: [
                        {required: true, message: "电话不可为空", trigger: "blur"},
                        {type: "string",},
                        {validator: validatePhone}
                    ]
                },
                // 对话框显示和隐藏
                dialogFormVisible: false,
                psdform: {
                    username: "",
                    phone: ""
                },
                formLabelWidth: "120px",
                // 返回的密码
                returnpsd: "",
                token: ''
            };
        },
        methods: {
            // 登录判断
            onSubmit() {
                // 为表单绑定验证功能
                const _this = this.form
                let params = new URLSearchParams();
                params.append('username', _this.username);
                params.append('password', _this.password);
                this.$https.post('/DoLogin', params).then((res) => {
                    localStorage.setItem('token',res.data.token)
                    if (res.data.token == 'true') {
                        this.$router.push("/home");
                    } else {
                        this.$message.error("请输入正确的账号密码");
                    }
                });
            },
            // 忘记密码
            forgetPsd() {
                const _this = this.psdform
                let params = new URLSearchParams();
                params.append('username', _this.username);
                params.append('phone', _this.phone);
                this.$https.post('/GetPassword', params).then((res) => {
                    this.returnpsd = res.data.extend.password
                    if (this.returnpsd) {
                        this.$notify({
                            title: "成功",
                            message: "您的密码是" + this.returnpsd,
                            type: "success"
                        });
                        this.psdform.username = "";
                        this.psdform.phone = "";
                        this.dialogFormVisible = false;
                    } else {
                        this.$message.error("工号与手机号不匹配");
                        this.psdform.username = "";
                        this.psdform.phone = "";
                        this.dialogFormVisible = false;
                    }
                })
            }
        }
    };
</script>
<style scoped>
    /* css通过外联引入 */
</style>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值