前端Vue3 校验辅助包 VeeValidate 3

浩奕染 2024-10-23 11:03:09 阅读 51

一、简介:

        VeeValidate 是一个流行的 Vue 3 验证库,它提供了一种声明的方式来构建验证逻辑。

        VeeValidate 3 旨在与 Vue 3 的组合式 API(Composition API)无缝集成,从而利用 Vue 3 的强大功能和性能优势。

       1.简单

                基于模板的验证,既熟悉又易于设置。

       2.灵活

                验证 HTML 输入和 Vue 组件,生成本地化错误,可扩展,它做到了这一切。

       3.配置

                不会妨碍您的配置,一切都是可选的。

二、如何安装 VeeValidate 3:

(这里需要安装VeeValidate 3并且集成yup)

        为什么集成yup?

                Yup 是一个流行的 JavaScript 模式验证库,它提供了丰富的验证方法来处理各种复杂的验证规则。通过集成 Yup,VeeValidate 3 能够利用这些内建的验证方法,从而简化开发者在创建验证规则时的工作。

<code>npm install vee-validate@next yup

三、如何使用VeeValidate 3:

import { validate } from 'vee-validate';

import * as yup from 'yup';


四、入门:

1.最大值(如果超过20最大值则返回对象)

const result = validate(searchInput.value, yup.string().max(20, '长度不能超过20个字符'));

语法

validate(文本框、需要校验的值, yup.文本框类型().max(最大值, '反馈信息'));

在没有超过最大值的情况下valid值为true

在超过最大值情况下vaild值为false并且会补充errors报错信息

值得注意的是errors返回的不是字符串,而是数组。而valid返回的是一个布尔值

<code>{

errors:"错误信息",

valid:状态

}

1.注意事项:

        在使用validate函数时需要异步!(async+await)否则没有效果

const designation = async () => {

const result = await validate(pageData.pageNum, yup.number().required('请输入页面值'));

console.log(result);

if (pageData.pageNum <= pageData.pageCount && result.valid) {

console.log(result);

}

}


五、基础函数:

1.最大值

validate(校验值, yup.string().max(最大值, '反馈信息'))

validate(value, yup.string().min(5, '长度不能小于5个字符'));

2.最小值

validate(校验值, yup.string().min(最小值, '反馈信息'));

validate(value, yup.string().max(20, '长度不能超过20个字符'));

3.长度范围

validate(校验值, yup.string().length(最小长度, 最大长度, '反馈信息'));

validate(value, yup.string().length(5, 20, '长度必须在5到20个字符之间'));

4.必填验证

validate(校验值, yup.string().required('反馈信息'));

validate(value, yup.string().required('此字段是必需的'));

5.电子邮件验证

validate(校验值, yup.string().email('反馈信息'));

validate(value, yup.string().email('必须是一个有效的电子邮件地址'));

6.URL

validate(校验值, yup.string().url('反馈信息'));

validate(value, yup.string().url('必须是一个有效的URL地址'));

7.自定义正则表达式

validate(校验值, yup.string().matches(正则表达式, '反馈信息'));

validate(value, yup.string().matches(/^[a-zA-Z]+$/, '只能包含字母'));

8.数字验证

validate(校验值, yup.number().positive('反馈信息'));

validate(value, yup.number().positive('必须是一个正数'));

9.整数验证

validate(校验值, yup.number().integer('反馈信息'));

validate(value, yup.number().integer('必须是一个整数'));

10.自定义

validate(校验值, yup.string().test('custom-test', '反馈信息', 条件));

validate(value, yup.string().test('custom-test', '自定义验证失败', val => val === 'expectedValue'));


六、进阶函数:

1.可以为空

validate(校验值, yup.string().nullable(true, '反馈信息'));

validate(value, yup.string().nullable(true, '可以为空'));

2.验证前使用方法

validate(校验值, yup.string().transform(value => value.toLowerCase(), '反馈信息'));

validate(value, yup.string().transform(value => value.toLowerCase(), '转换为小写'));

3.去除字符串首尾的空格、去除数组的空元素

validate(校验值, yup.string().strip());

validate(value, yup.string().strip());

4.数组包含值

validate(校验值, yup.string().oneOf([ '数组', '是否包含' ], '反馈信息'));

validate(value, yup.string().oneOf([ 'option1', 'option2' ], '必须是一个有效选项'));

4.数组非包含值

validate(校验值, yup.string().notOneOf([ '数组', '不包含' ], '反馈信息'));

validate(value, yup.string().notOneOf([ 'option1', 'option2' ], '不能是这些选项之一'));

5.值之间

validate(校验值, yup.string().between(最小值, 最大值, '反馈信息'));

validate(value, yup.string().between(1, 10, '必须在1到10之间'));

6.叠加使用

validate(value, yup.string().nullable(true, '可以为空').between(1, 10, '必须在1到10之间'));

7.大于

validate(校验值, yup.number().moreThan(大于值, '反馈信息'));

validate(value, yup.number().moreThan(18, '成年人年龄必须大于18岁'));

8.小于

validate(校验值,yup.number().lessThan(小于值, '反馈信息'));

validate(value,yup.number().lessThan(18, '未成年人年龄必须小于18岁'));

8.自定义条件

校验值.yupTest('is-older', '反馈信息', value => {

逻辑判断

return true;

});

// age 必须大于 birthdate 字段计算出的年龄

ageField.value.yupTest('is-older', '年龄必须大于18岁', async value => {

const birthdate = new Date(birthdateField.value);

const age = new Date().getFullYear() - birthdate.getFullYear();

return value > age;

});

9.连续条件

校验值.when('age', {

is: 条件,

then: 其他条件,

otherwise:继续条件

});

value.when('age', {

is: (val) => val > 18,

then: yup.number().moreThan(18, '年龄必须大于18岁'),

otherwise: yup.number().lessThan(100, '年龄不能超过100岁')

});

10.进阶使用

<template>

<ValidationProvider rules="even" v-slot="{ errors }">code>

<input v-model="值" type="number" placeholder="type something">code>

<span>{ { 反馈信息[0] }}</span>

</ValidationProvider>

</template>

<script>

import { extend } from 'vee-validate';

extend('even', 值=> {

return 条件;

});

export default {

data: () => ({

值: ''

})

};

</script>

<template>

<ValidationProvider rules="even" v-slot="{ errors }">code>

<input v-model="value" type="number" placeholder="type something">code>

<span>{ { errors[0] }}</span>

</ValidationProvider>

</template>

<script>

import { extend } from 'vee-validate';

extend('even', value => {

return value % 2 === 0;

});

export default {

data: () => ({

value: ''

})

};

</script>

七、VeeValidate 3组件

1.ValidationProvider 组件验证反馈(将错误信息反馈到页面上)

        1.1ValidationProvider 属性:

                name:校验值,用于在错误消息中标识字段

<ValidationProvider name="username" ...>code>

                rules:条件 (required:必填、min:最小值、max:最大值)

        required: 检查字段是否已填

rules="required"code>

                min:value: 检查字符串长度或数值是否至少为提供的值。

​​​​​​​rules="min:10"code>

                max:value: 检查字符串长度或数值是否不超过提供的值。

rules="max:10"code>

                length:value: 检查字符串长度或数组长度是否等于提供的值。

rules="length:10"code>

                minlength:value: 检查字符串长度或数组长度是否至少为提供的值。

rules="minlength:10"code>

                maxlength:value: 检查字符串长度或数组长度是否不超过提供的值。

rules="maxlength:10"code>

                pattern:regexp: 使用正则表达式检查字段值是否符合模式。

rules="pattern:^[a-zA-Z0-9]+$"code>

                email: 检查字段值是否为有效的电子邮件地址。

rules="email"code>

                url: 检查字段值是否为有效的 URL。

rules="url"code>

                alpha: 检查字段值是否只包含字母。

rules="alpha"code>

                alphanum: 检查字段值是否只包含字母和数字。

rules="alphanum"code>

                numeric: 检查字段值是否为数字。

rules="numeric"code>

                integer: 检查字段值是否为整数。

rules="integer"code>

                digits:value: 检查字段值是否只包含数字,并且位数正好为提供的值。

rules="digits:3"code>

                is:value: 检查字段值是否等于提供的值。

rules="is:specificValue"code>

                oneOf:list: 检查字段值是否包含在提供的数组中。

rules="oneOf:['option1','option2']"code>

                notIn:list: 检查字段值是否不包含在提供的数组中。

rules="notIn:['option1','option2']"code>

                组合规则: 可以用管道 | 来组合多个规则。(条件基本上包括之前使用的所有函数、但是组件无法自定义条件)

<ValidationProvider rules="required|min:3" ...>code>

                slot: 用于自定义插槽的名称。

<ValidationProvider v-slot="slotProps">code>

<input :value="slotProps.value" @input="slotProps.setValue">code>

</ValidationProvider>

                bail:当设置为 false 时,将校验所有条件,而不仅仅是第一个失败的条件。

<ValidationProvider bail=false ...>

                immediate: 当设置为 true 时,将立即校验字段,而不是等待用户失去焦点。

<ValidationProvider immediate ...>

                validateOnMount: 当设置为 true 时,将组件挂载后立即执行校验。

<ValidationProvider validateOnMount ...>

                slim: 当设置为 true 时,ValidationProvider 将不包含任何额外的样式或类名。

<ValidationProvider slim ...>

                tag: 用于指定 ValidationProvider 渲染的 HTML 元素。

<ValidationProvider tag="div" ...>code>

                disabled: 当设置为 true 时,将禁用校验。

<ValidationProvider disabled ...>

                events: 用于指定触发校验的事件。

<ValidationProvider events="input|blur" ...>code>

                as: 指定替代输入元素的名称,当使用自定义输入组件时非常有用。

<ValidationProvider as="textarea" ...>code>

                initialValue: 用于设置字段的初始值。

<ValidationProvider initialValue="some value" ...>code>

                withMessage: 用于自定义错误消息显示的组件。

<ValidationProvider withMessage="{ message, field }">code>

<!-- 自定义错误消息展示 -->

</ValidationProvider>

2.代码演示

<template>

<form @submit.prevent="handleSubmit">code>

<!-- 使用 ValidationProvider 包裹输入元素 -->

<ValidationProvider

<!-- 校验值 -->

name="username"code>

<!-- 条件:必填、最小长度5、最大长度10 -->

rules="required|min:5|max:20"code>

<!-- 插槽返回错误信息 -->

v-slot="{ errors }"code>

>

<el-input v-model="username" placeholder="请输入用户名"></el-input>code>

<!-- 显示错误消息 -->

<span>{ { errors[0] }}</span>

</ValidationProvider>

<el-button type="primary" @click="handleSubmit">提交</el-button>code>

</form>

</template>

<script setup>

import { ref } from 'vue';

import { ValidationProvider } from 'vee-validate';

import * as yup from 'yup';

// 创建响应式的表单数据

const username = ref('');

// 表单提交处理函数

const handleSubmit = () => {

console.log('表单提交');

// 处理表单数据...

};

</script>

八、ValidationObserver 表单组件

2.代码演示

<template>

<ValidationObserver v-slot="{ handleSubmit }">code>

<form @submit.prevent="handleSubmit(onSubmit)">code>

<!-- 表单字段 -->

<ValidationProvider name="email" rules="required|email" v-slot="{ errors }">code>

<input type="email" v-model="email" />code>

<span>{ { errors[0] }}</span>

</ValidationProvider>

<button type="submit">提交</button>code>

</form>

</ValidationObserver>

</template>

<script setup>

import { ref } from 'vue';

import { ValidationObserver, ValidationProvider } from 'vee-validate';

// 响应式数据

const email = ref('');

// 表单提交处理函数

const onSubmit = (resolve, reject) => {

// 如果需要,可以在这里访问 resolve 和 reject 来处理表单提交结果

console.log('表单提交');

};

</script>



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。