vue el-form表单rule校验(特殊字符、中文、数字等)

element-UI中el-form带有检验功能,用法如下:

<template>
    <div>
        <el-form size="small" ref="userform" :rules="rulesForm" :model="form">
            <el-form-item label="用户名" prop="userName">
                <el-input v-model.trim="form.userName"  :disabled="addUserDialogTitle == '编辑用户'"></el-input>
            </el-form-item>
            <el-form-item label="联系方式" prop="phone">
                <el-input v-model.number="form.phone"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="onSubmit">立即创建</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>
<script>
import { checkSpecialKey,validateInputPhone } from '@/api/check'
export default {
    name: 'userList',
    data () {
        let validateInputSpecialKey = (rule, value, callback) => {
            if (!checkSpecialKey(value)) {
                callback(new Error("不能含有特殊字符!!"));
            } else {
                callback();
            }
        };
        let validateInputPhone = (rule, value, callback) => {
            if (!checkPhone(value)) {
                callback(new Error("请正确输入联系方式!!"));
            } else {
                callback();
            }
        };
        return {
            form:{},
            rulesForm: {//弹窗输入框检验
                userName: [
                  { required: true,message: "请输入用户名",trigger: "blur"},
                  { min: 3,max: 10,message: "长度在 3 - 10 字符" },
                  { validator: validateInputSpecialKey, trigger: "blur" }
                ],
                phone:[
                  { required: true,message: "请输入联系方式",trigger: "blur"},
                  { validator: validateInputPhone, trigger: "blur" }
                ]
            }
        }
    },
    methods:{
        //提交表单
        onSubmit(){
            this.$refs['userform'].validate((valid) => {
                if (valid) {
                    //TODO 调用接口提交数据
                }else{
                    return false
                }
            })
        }
    }
}
</script>

校验方法有:

校验是否包含特殊字符

export function checkSpecialKey(str) {
    let specialKey =
    "[`~!#$^&*()=|{}':;'\\[\\].<>/?~!#¥……&*()——|{}【】‘;:”“'。,、?]‘'";
    for (let i = 0; i < str.length; i++) {
        if (specialKey.indexOf(str.substr(i, 1)) != -1) {
        return false;
        }
    }
    return true;
}

校验是否包含特殊字符(路径专用)

export function checkSpecialKeyPath(str) {
    let specialKey =
    "[`~!#$^&*()=|{}';'<>?~!#¥……&*()——|{}【】‘;”“'。,、?]‘'";
    for (let i = 0; i < str.length; i++) {
        if (specialKey.indexOf(str.substr(i, 1)) != -1) {
        return false;
        }
    }
    return true;
}

校验是否包含中文

export function checkChinese(val) {
    // 正则匹配非中英文及数字的字符
    let reg = /[\u4e00-\u9fa5]/;
    let n = reg.test(val);
    if ( n ) {
        return false
    }
    return true
}

校验是否手机号码或者固话

export function checkPhone(val) {
    let reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;
    let n = reg.test(val);
    if ( !n ) {
        return false
    }
    return true
}

校验密码是否合格

export function checkPassword(val) {
    let reg = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/;
    let n = reg.test(val);
    if ( !n ) {
        return false
    }
    return true
}

校验非负浮点数

export function checkNumberNotNegative(val) {
    let reg = /^\d+(\.\d+)?$/;
    let n = reg.test(val);
    if ( !n ) {
        return false
    }
    return true
}

Vue 3 中,可以使用 `v-model` 指令的 `v-bind` 和 `v-on` 缩写语法糖结合 Element-Plus 中的 `el-form` 组件自定义校验规则。具体步骤如下: 1.在 `template` 中使用 `el-form` 组件包裹表单,并添加需要校验的表单项。 ```html <el-form ref="form" :model="formData" :rules="rules"> <el-form-item label="用户名" prop="username"> <el-input v-model="formData.username"></el-input> </el-form-item> </el-form> ``` 其中,`:model` 属性绑定表单数据,`:rules` 属性绑定校验规则。 2.在 `data` 选项中定义表单数据及校验规则。 ```javascript data() { return { formData: { username: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { validator: this.validateUsername, trigger: 'blur' } ] } } }, ``` 其中,`rules` 对象中的 `username` 属性表示需要校验的表单项,`required` 表示必填(不能为空),`validator` 表示自定义校验方法,`trigger` 表示校验触发时机(此处为失去焦点时触发校验)。 3.定义自定义校验方法 `validateUsername`。 ```javascript methods: { validateUsername(rule, value, callback) { if (value.length < 6) { callback(new Error('用户名长度不能少于 6 个字符')) } else { callback() } } } ``` 其中,`rule` 表示当前校验规则,`value` 表示当前表单项的值,`callback` 是一个回调函数,用于返回校验结果。如果校验不通过,调用 `callback` 方法并传递一个 `Error` 对象,表示校验不通过并设置错误信息。如果校验通过,调用 `callback` 方法并不传递任何参数。 注意:在自定义校验方法中,需要使用 `callback` 方法返回校验结果,否则会出现校验无效的情况。 以上就是使用 Element-Plus 中的 `el-form` 组件结合 Vue 3 的语法糖自定义校验规则的方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值