前言
前端开发中,经常需要对用户传入的参数进行校验处理,常见的参数校验如验证手机号格式是否正确,密码是否符合规范等,这时候我们需要使用到一些验证库。
本文将介绍一款npm包@absolunet/joi,它是一款功能非常强大的验证库,支持多种类型和自定义验证规则,使用简单,下面进行详细说明。
安装
使用npm命令进行安装:
npm install @absolunet/joi
入门
载入模块
在代码中载入模块:
const Joi = require('@absolunet/joi');
验证字符串
以验证邮箱为例,代码如下:
-- -------------------- ---- ------- ----- ------ - -------------------- ------------------ - -------------- ----- ----- - --------------- ----- - ----- - - ----------------------- -- ------- - -------------------------------------- - ---- - ----------------------- -
以上代码中,我们定义了一个字符串类型的校验规则。使用email方法来说明需要校验的是邮箱格式,minDomainSegments参数是指邮箱后缀的最小级别,例如com和cn的级别都是最低的一级。使用required方法说明这个校验规则是必填项。
接着将待校验的邮箱字符串传入schema.validate()方法进行校验。如果返回的error不为空,说明校验失败,可以从error.details中获取失败信息;反之,校验成功。
验证数字
以验证年龄为例,代码如下:
-- -------------------- ---- ------- ----- ------ - --------------------------------------- ----- --- - --- ----- - ----- - - --------------------- -- ------- - -------------------------------------- - ---- - ----------------------- -
以上代码中,我们定义了一个数字类型的校验规则。使用integer方法说明需要验证整数型,再使用min和max方法来限制年龄的范围。
验证对象
以验证用户信息为例,代码如下:
-- -------------------- ---- ------- ----- ---------- - ------------ ----- --------------------------------------- ---- -------------------------------------------------- ------ -------------------- ------------------ - -------------- --- ----- ---- - - ----- ------ ---- --- ------ --------------- -- ----- - ----- - - -------------------------- -- ------- - -------------------------------------- - ---- - ----------------------- -
使用Joi.object()定义了一个对象的验证规则,其中name, age, email字段分别使用Joi.string(), Joi.number(), Joi.string()进行验证,每个字段均指定了必填项,且对输入范围有了限制。
将待校验的user对象传入userSchema.validate()方法进行校验,如果返回的error不为空,说明校验失败,可以从error.details中获取失败信息;反之,校验成功。
自定义校验规则
有时我们需要自定义一些校验规则,例如验证身份证号,如下:
-- -------------------- ---- ------- -- -------- ---------------- -- -- ----- --------- ----- ------------- --------- - ---------------- ----------- --- ------- -------- -- --------------- -------- - ----- ------ - -------------------------------------------------------------------------------- ----- ------ - ------------------------------------------------------------------------- -- ------------------- -- ------------------- - ------ ------ - ---- - ------ ------------------------------- - -- ---- -- -------------- ----- ------ - --------------------------------- ----- ------ - --------------------- ----- - ----- - - ------------------------ -- ------- - -------------------------------------- - ---- - ----------------------- -
上述代码中,我们使用Joi.extend()方法来进行自定义验证规则的定义。
使用type指定要自定义验证的类型,在这里我们指定为idcard;base指定要基于哪种类型进行扩展,根据身份证号的特点,我们使用了string类型进行扩展;messages可以指定自定义错误信息,这里我们指定了'idcard.format'错误信息;validate方法是实际的验证过程,当满足特定验证规则时,返回value,否则返回错误信息。
可以结合上述示例,对自定义的校验规则进行进一步探究。
小结
本文主要介绍了一款功能非常强大的验证库@absolunet/joi,包括常见类型的使用方法,自定义校验规则及其应用。使用本库能够大大简化前端表单验证流程。
参考资料
- https://joi.dev/api/?v=17.4.0
- https://www.npmjs.com/package/@absolunet/joi
- https://zhuanlan.zhihu.com/p/110331700
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/127289