3种方式教你学会vue表单校验 您所在的位置:网站首页 js表单数据验证怎么做 3种方式教你学会vue表单校验

3种方式教你学会vue表单校验

2024-07-04 15:56| 来源: 网络整理| 查看: 265

文章目录 一、常用验证方式1.data 中验证data 数据: 2.行内验证3.引入外部定义的规则 二、表单提交时验证1.表单的提交按钮2.methods 方法

一、常用验证方式

vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种:

1.data 中验证 表单内容:

:代表这是一个表单 -> ref:表单被引用时的名称,标识 -> rules:表单验证规则 -> model:表单数据对象 -> label-width:表单域标签的宽度,作为 Form 直接子元素的 form-item 会继承该值 -> :表单中的每一项子元素 -> label:标签文本 -> prop:表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的 :输入框 -> v-model:绑定的表单数据对象属性 -> style:行内样式 -> maxlength:最大字符长度限制

data 数据: data() { return { // 省略别的数据定义 ... // 表单验证 formRules: { userName: [ {required: true,message: "请输入用户名称",trigger: "blur"} ] } } }

formRules:与上文 ‘表单内容’ 中 表单的 :rules 属性值相同 userName:与上文 ‘表单内容’ 中 表单子元素的 prop 属性值相同 验证内容是:必填,失去焦点时验证,如果为空,提示信息为 ‘请输入用户名称’。 可以加多个验证规则:

rules: { age: [ // 必填 { required: true, message: '请输入年龄', trigger: 'blur' }, // 必须是数字 { validator: isNum, trigger: 'blur' } ], 2.行内验证 表单内容:

-> rules:和第一种方式表现的效果一致,只是写法不一样。 data 数据没有内容

3.引入外部定义的规则

表单内容

表单内容与第一种方式写法一致。 script 内容

// 引入了外部的验证规则 import { validateAccountNumber } from "@/utils/validate"; // 判断银行卡账户是否正确 const validatorAccountNumber = (rule, value, callback) => { if (!value) { return callback(new Error("请输入账户信息")); } else { if (validateAccountNumber(value)) { callback(); } else { return callback(new Error('账号格式不正确')) } } }; export default { data() { return { // 省略别的数据定义 ... // 表单验证 formRules: { accountNumber: [ {required: true,validator: validatorAccountNumber,trigger: "blur"} ] } } } }

import:先引入了外部的验证规则 const:定义一个规则常量,常量名可变, ‘= (rule, value, callback) => {}’ 为固定格式,value 入参为验证的字段值 formRules -> accountNumber:表单验证中使用 validator 指定自定义校验规则常量名称 validate.js

二、表单提交时验证 1.表单的提交按钮 保存 取消

:按钮 -> type:按钮类型 -> @click:按钮点击时触发的事件,这里注意方法的入参为 ‘rulesForm’,这里要与 表单的 ref 属性值一致。

2.methods 方法 methods: { // 保存 onSubmit(formName) { this.$refs[formName].validate(valid => { if (valid) { console.log(“success submit!!”); }else{ console.log(“error submit!!”); } } }, // 取消 cancel() { } } this.$refs[formName].validate:formName 就是传入的 'rulesForm',与 表单的 rel 属性值一致,这样就指定好需要验证的表单了。 另外附: 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 validatePhoneTwo(rule, value, callback) { const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;; if (value == '' || value == undefined || value == null) { callback(); } else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的电话号码或者固话号码')); } else { callback(); } } } /* 是否固话*/ export function validateTelphone(rule, value,callback) { const reg =/0\d{2}-\d{7,8}/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的固话(格式:区号+号码,如010-1234567)')); } else { callback(); } } } /* 是否手机号码*/ export function validatePhone(rule, value,callback) { const reg =/^[1][3,4,5,7,8][0-9]{9}$/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的电话号码')); } else { callback(); } } } /* 是否身份证号码*/ export function validateIdNo(rule, value,callback) { const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的身份证号码')); } else { callback(); } } } /* 是否邮箱*/ export function validateEMail(rule, value,callback) { const reg =/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/; if(value==''||value==undefined||value==null){ callback(); }else{ if (!reg.test(value)){ callback(new Error('请输入正确的邮箱地址')); } else { callback(); } } } /* 合法uri*/ export function validateURL(textval) { const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; return urlregex.test(textval); } /*验证内容是否英文数字以及下划线*/ export function isPassword(rule, value, callback) { const reg =/^[_a-zA-Z0-9]+$/; if(value==''||value==undefined||value==null){ callback(); } else { if (!reg.test(value)){ callback(new Error('密码仅由英文字母,数字以及下划线组成')); } else { callback(); } } } /*自动检验数值的范围*/ export function checkMax20000(rule, value, callback) { if (value == '' || value == undefined || value == null) { callback(); } else if (!Number(value)) { callback(new Error('请输入[1,20000]之间的数字')); } else if (value < 1 || value > 20000) { callback(new Error('请输入[1,20000]之间的数字')); } else { callback(); } } //验证数字输入框最大数值,32767 export function checkMaxVal(rule, value,callback) { if (value < 0 || value > 32767) { callback(new Error('请输入[0,32767]之间的数字')); } else { callback(); } } //验证是否1-99之间 export function isOneToNinetyNine(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[1-9][0-9]{0,1}$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数,值为【1,99】')); } else { callback(); } } }, 0); } // 验证是否整数 export function isInteger(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[0-9]*[1-9][0-9]*$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数')); } else { callback(); } } }, 0); } // 验证是否整数,非必填 export function isIntegerNotMust(rule, value, callback) { if (!value) { callback(); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[0-9]*[1-9][0-9]*$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数')); } else { callback(); } } }, 1000); } // 验证是否是[0-1]的小数 export function isDecimal(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入[0,1]之间的数字')); } else { if (value < 0 || value > 1) { callback(new Error('请输入[0,1]之间的数字')); } else { callback(); } } }, 100); } // 验证是否是[1-10]的小数,即不可以等于0 export function isBtnOneToTen(rule, value, callback) { if (typeof value == 'undefined') { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数,值为[1,10]')); } else { if (!(value == '1' || value == '2' || value == '3' || value == '4' || value == '5' || value == '6' || value == '7' || value == '8' || value == '9' || value == '10')) { callback(new Error('请输入正整数,值为[1,10]')); } else { callback(); } } }, 100); } // 验证是否是[1-100]的小数,即不可以等于0 export function isBtnOneToHundred(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入整数,值为[1,100]')); } else { if (value < 1 || value > 100) { callback(new Error('请输入整数,值为[1,100]')); } else { callback(); } } }, 100); } // 验证是否是[0-100]的小数 export function isBtnZeroToHundred(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入[1,100]之间的数字')); } else { if (value < 0 || value > 100) { callback(new Error('请输入[1,100]之间的数字')); } else { callback(); } } }, 100); } // 验证端口是否在[0,65535]之间 export function isPort(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (value == '' || typeof(value) == undefined) { callback(new Error('请输入端口值')); } else { const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入在[0-65535]之间的端口值')); } else { callback(); } } }, 100); } // 验证端口是否在[0,65535]之间,非必填,isMust表示是否必填 export function isCheckPort(rule, value, callback) { if (!value) { callback(); } setTimeout(() => { if (value == '' || typeof(value) == undefined) { //callback(new Error('请输入端口值')); } else { const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入在[0-65535]之间的端口值')); } else { callback(); } } }, 100); } /* 小写字母*/ export function validateLowerCase(str) { const reg = /^[a-z]+$/; return reg.test(str); } /*保留2为小数*/ export function validatetoFixedNew(str) { return str ; } /* 验证key*/ // export function validateKey(str) { // var reg = /^[a-z_\-:]+$/; // return reg.test(str); // } /* 大写字母*/ export function validateUpperCase(str) { const reg = /^[A-Z]+$/; return reg.test(str); } /* 大小写字母*/ export function validatAlphabets(str) { const reg = /^[A-Za-z]+$/; return reg.test(str); }

参考: https://www.csdn.net/gather_2f/MtTaAgxsMzgxMy1ibG9n.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有