vue 自定义指令input表单的数据验证

一、代码

<template>
    <div class="check" >
        <h3>{{msg}}</h3>
        <div class="input">
            <input type="text" v-input v-focus><span>{{msg1}}</span>
        </div>
        <div class="input">
            <input type="text" v-input v-required><span>{{msg2}}</span>
        </div>
        <div class="input">
            <!-- required:true/false 表示这个是必填项 -->
            <input type="text" v-input v-checked="{required:true,}"><span>{{msg3}}</span>
        </div>
        <div class="input">
            <!-- <input type="text" v-input v-validate="‘required|email|phone|min(5)|max(15)|minlength(6)|maxlength(12)|regex(/^[0-9]*$/)‘">
            required  验证是否是必填项
            email 验证是否是邮箱
            phone 验证是否是电话号码
            min(5) 验证最小值
            max(3) 验证最大值
            minlength(6) 验证最小长度
            maxlength(12) 验证最大长度
            regex(/^[0-9]*$/) 进行正则验证
            -->
            <input type="text" v-input
                   v-validate="‘required|min(5)|max(15)|minlength(6)|maxlength(12)|regex(/^[0-9]*$/)‘" placeholder="多选验证">
        </div>
        <div class="input">
            <!--
            验证必须是数字:/^[0-9]*$/
            验证由26个英文字母组成的字符串:/^[A-Za-z]+$/
            验证手机号: /^[1][3,4,5,7,8][0-9]{9}$/;
            验证邮箱:/^(\w-*\.*)[email protected](\w-?)+(\.\w{2,})+$/;
            -->
            <input type="text" v-input v-validate="‘required|phone‘" placeholder="验证手机号码">
        </div>
        <div class="input">
            <input type="text" v-input v-validate="‘required|email‘" placeholder="验证邮箱">
        </div>
    </div>
</template>

<script>
    export default {
        name: ‘check‘,
        data() {
            return {
                msg: ‘指令‘,
                tipsBorderColor: ‘red‘,
                msg1: ‘最简单的指令‘,
                msg2: ‘验证不能为空的指令‘,
                msg3: ‘进行正则验证‘,
                tipsMsg: ‘‘,
            }
        },

        directives: {
            // 修饰input框的指令
            input: {
                // 当被绑定的元素插入到DOM上的时候
                inserted: function (el) {
                    el.style.width = "300px";
                    el.style.height = "35px";
                    el.style.lineHeight = "35px";
                    el.style.background = "#ddd";
                    el.style.fontSize = "16px";
                    el.style.border = "1px solid #eee";
                    el.style.textIndent = "5px";
                    el.style.textIndent = "8px";
                    el.style.borderRadius = "5px";
                }
            },
            // input框默认选中的指令
            focus: {
                inserted: function (el) {
                    el.focus();
                }
            },
            // 不能为空的指令
            required: {
                inserted: function (el) {
                    el.addEventListener(‘blur‘, function () {
                        if (el.value == ‘‘ || el.value == null) {
                            el.style.border = "1px solid red";
                            console.log(‘我不能为空‘);
                        }

                    })
                }
            },
            // 验证指令
            checked: {
                inserted: function (el) {
                    return el
                }
            },
            // 验证
            validate: {
                inserted: function (el, validateStr) {
                    // 将验证规则拆分为验证数组
                    let validateRuleArr = validateStr.value.split("|");
                    // 监听失去焦点的时候
                    el.addEventListener(‘blur‘, function () {
                        //失去焦点进行验证
                        checkedfun();
                    });

                    // 循环进行验证
                    function checkedfun() {
                        for (var i = 0; i < validateRuleArr.length; ++i) {
                            let requiredRegex = /^required$/; // 判断设置了required
                            let emailRegex = /^email$/; // 判断设置了email
                            let phoneRegex = /^phone$/; // 判断设置了 phone
                            let minRegex = /min\(/; //判断设置了min 最小值
                            let maxRegex = /max\(/; //判断设置了max 最大值
                            let minlengthRegex = /minlength\(/; //判断设置了 minlength 最大长度
                            let maxlengthRegex = /maxlength\(/; //判断设置了 maxlength 最大长度
                            let regexRegex = /regex\(/;
                            // 判断设置了required
                            if (requiredRegex.test(validateRuleArr[i])) {
                                if (!required()) {
                                    break;
                                } else {
                                    removeTips();
                                }

                            }

                            // 判断设置了email
                            if (emailRegex.test(validateRuleArr[i])) {
                                if (!email()) {
                                    break;
                                } else {
                                    removeTips();
                                }

                            }

                            // 判断设置了 phone
                            if (phoneRegex.test(validateRuleArr[i])) {
                                if (!phone()) {
                                    break;
                                } else {
                                    removeTips();
                                }

                            }

                            // 判断是否设置了最小值
                            if (minRegex.test(validateRuleArr[i])) {
                                if (!eval(validateRuleArr[i])) {
                                    break;
                                } else {
                                    removeTips();
                                }

                            }

                            // 判断是否设置了最大值
                            if (maxRegex.test(validateRuleArr[i])) {
                                if (!eval(validateRuleArr[i])) {
                                    break;
                                } else {
                                    removeTips();
                                }

                            }

                            // 判断设置了最小长度
                            if (minlengthRegex.test(validateRuleArr[i])) {
                                if (!eval(validateRuleArr[i])) {
                                    break;
                                } else {
                                    removeTips();
                                }

                            }

                            // 判断设置了最大长度
                            if (maxlengthRegex.test(validateRuleArr[i])) {
                                if (!eval(validateRuleArr[i])) {
                                    break;
                                } else {
                                    removeTips();
                                }

                            }

                            // 判断测试正则表达式
                            if (regexRegex.test(validateRuleArr[i])) {
                                if (!eval(validateRuleArr[i])) {
                                    break;
                                } else {
                                    removeTips();
                                }

                            }

                        }

                    }

                    // 验证是否是必填项
                    function required() {
                        if (el.value == ‘‘ || el.value == null) {
                            // console.log("不能为空");
                            tipMsg("不能为空");
                            return false;
                        }

                        return true;
                    }

                    // 验证是否是邮箱
                    function email() {
                        let emailRule = /^(\w-*\.*)[email protected](\w-?)+(\.\w{2,})+$/;
                        if (!emailRule.test(el.value)) {
                            tipMsg("请输入正确的邮箱地址");
                            return false;
                        }

                        return true;
                    }

                    // 验证是否是手机号码
                    function phone() {
                        let phoneRule = /^[1][3,4,5,7,8][0-9]{9}$/;
                        if (!phoneRule.test(el.value)) {
                            tipMsg("请输入正确的手机号码");
                            return false;
                        }

                        return true;
                    }

                    // 最小值验证
                    function min(num) {
                        if (el.value < num) {
                            tipMsg("最小值不能小于" + num);
                            //console.log(‘最小值不能小于‘+num);
                            return false;
                        }

                        return true;
                    }

                    // 最大值验证
                    function max(num) {
                        if (el.value > num) {
                            tipMsg("最大值不能大于" + num);
                            //console.log(‘最大值不能大于‘+num);
                            return false;
                        }

                        return true;
                    }

                    // 最小长度验证
                    function minlength(length) {
                        if (el.value.length < length) {
                            //console.log(‘最小长度不能小于‘+length);
                            tipMsg("最小长度不能小于" + length);
                            return false;
                        }

                        return true;
                    }

                    // 最大长度进行验证
                    function maxlength(length) {
                        if (el.value.length > length) {
                            //console.log(‘最大长度不能大于‘+length);
                            tipMsg("最大长度不能大于" + length);
                            return false;
                        }
                        return true;
                    }

                    // 进行正则表达式的验证
                    function regex(rules) {
                        if (!rules.test(el.value)) {
                            tipMsg("请输入正确的格式");
                            return false;
                        }
                        return true;
                    }

                    // 添加提示信息
                    function tipMsg(msg) {
                        removeTips();
                        let tipsDiv = document.createElement(‘div‘);
                        let curDate = Date.parse(new Date());
                        tipsDiv.innerText = msg;
                        tipsDiv.className = "tipsDiv";
                        tipsDiv.id = curDate;
                        tipsDiv.style.position = "absolute";
                        tipsDiv.style.top = el.offsetTop + 45 + ‘px‘;
                        tipsDiv.style.left = el.offsetLeft + ‘px‘;
                        document.body.appendChild(tipsDiv);
                        //setTimeout(function(){
                        //  document.getElementById(curDate).remove();
                        //},2000);
                    }

                    // 移除提示信息
                    function removeTips() {
                        if (document.getElementsByClassName(‘tipsDiv‘)[0]) {
                            document.getElementsByClassName(‘tipsDiv‘)[0].remove();
                        }

                    }
                },
            }
        }
    }
</script>

<style>

    .input {
        padding-bottom: 20px;
        float: left;
        clear: both;
        margin-left: 500px;
        display: block;

    }

    .check input {
        width: 300px;
        height: 35px;
        outline: none;
        background: #ddd;
    }

    .check span {
        padding-left: 20px;
    }

    .tipsDiv {
        height: 27px;
        line-height: 25px;
        border: 1px solid #333;
        background: #333;
        padding: 0px 5px;
        border-radius: 4px;
        color: #fff;
        font-size: 16px;
    }

    .tipsDiv:before {
        content: ‘‘;
        display: block;
        border-width: 0 5px 8px;
        border-style: solid;
        border-color: transparent transparent #000;
        position: absolute;
        top: -9px;
        left: 6px;
    }
</style>

原文地址:https://www.cnblogs.com/angelyan/p/11065554.html

时间: 2024-10-20 23:45:14

vue 自定义指令input表单的数据验证的相关文章

自定义常用input表单元素三:纯css实现自定义Switch开关按钮

自定义常用input表单元素的第三篇,自定义一个Switch开关,表面上看是和input没关系,其实这里采用的是checkbox的checked值的切换.同样,采用css伪类和"+"css选择器为思路,下面是预览图: 下面先放HTML代码,看下DOM结构: <input type="checkbox" id="my_switch" class="my_switch"> <label for="my_

html表单提交数据验证

我们在做B/S项目开发中,经常会用到表单提交数据,在页面需要做js数据验证,简单方法如下 js部分: <script type="text/javascript"> function validate_required(field, alerttxt) { with (field) { if (value == null || value == "") { alert(alerttxt); return false } else { return tru

Vue基础篇--7表单输入绑定input

Vue基础篇--7表单输入绑定input 1.基础语法 你可以用 v-model 指令在表单 . 及 `元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素.尽管有些神奇,但v-model` 本质上不过是语法糖.它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理. 注意: v-model 会忽略所有表单元素的 value.checked.selected 特性的初始值而总是将 Vue 实例的数据作为数据来源.你应该通过 JavaScript 在组件的 data

自定义表单的数据发送到邮件

背景:前几天客户让在网站里面增加一个报名的系统,于是就想到了自定义表单,但是后面客户提出要求说假如学院报名后能把报名信息发送到他的qq邮箱,这样,他就不用登陆后台查看dede的自定义表单了.觉得也不错,比较实用,先前考虑的是dede的会员邮件系统来实现,最后发现没有这个phpmailer省事.于是利用phpmailer 的class.phpmailer.类实现发送.修改:/plus/diy.php 修改了自定义表单模板的童鞋记得修改下templets/plus/post_diyform.htm 

2017.04 vue学习笔记---08表单控件绑定---基础用法

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> div{ margin-bottom: 30px; } </style> <script src="js/vue.js"></script> <

SpringMVC&lt;from:form&gt;表单标签和&lt;input&gt;表单标签简介 转http://blog.csdn.net/hp_yangpeng/article/details/51906654

SpringMVC<from:form>表单标签和<input>表单标签简介 在使用SpringMVC的时候我们可以使用spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: Jsp代码 <%@taglib uri="http://www.springframework.org/tags/fo

Vue如何使用vee-validate表单验证

Vue项目遇到要表单验证了吧,对我来说表单验证是个很纠(dan)结(teng)的内容,各种判断凌乱到飞起.往常使用jquery的validate插件做表单验证方便吧,你也可以在Vue里引入jquery的validate插件(如何引入jquery在我上一篇博文有介绍,点击查看).但是我们是做vue项目也,不到实在解决不了还是建议不要引入,因为Vue自己就有表单验证的插件,那就是vee-validate. 我在这并不是详细讲解vee-validate的使用功能,只是快速了解如何在项目里使用vee-v

thinkPHP5.0使用form表单提交数据和删除文章,不用TP的提示页面,使用弹出提示信息

form表单提交数据和删除文章时,TP的默认信息提示页面的看起来不是很好看,想要实现弹窗提示怎么做呢? 前端:可以使用前端的一个知识--iframe,iframe元素会创建包含另外一个文档的内联框架:target,规定在何处打开链接文档. 另外想要实现一个好看的方便.能重复使用的弹窗就要开发一个弹窗插件了,这里推荐使用前端的弹窗插件sweetalert.js,为了方便.重复使用我们把它成封装一个函数,页面要引入sweetalert.js的css和js文件 后端:为了方便以后重复使用,先写一个公共

关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加的表单验证是否正确,需要注意的点有: 1.使用此方法前检查prop一定必须要写在<el-form-item>上面,写在里面的input上或者其他任何地方都不行(el-form-item prop属性绑定) 2.el-form rules,model属性绑定,ref标识 自定义表单验证的坑: 一.valid