介绍
在前端开发中,我们经常需要对用户输入的数据进行验证。但是,手动编写验证函数比较繁琐,而且容易出错。为此,有很多开发者针对不同的验证场景,开发了各种验证工具库。其中,npm 上就有很多优秀的验证库,比如 validator.js、joi 等等。
而在众多验证库中,我比较喜欢 validator-models 这个库。因为它采用了模型的概念,使得验证规则更加灵活,易于维护和扩展。本文就对 validator-models 进行详细介绍,并提供使用案例以供参考。
安装
可以使用 npm 包管理器进行安装:
npm install validator-models
使用
使用 validator-models,我们需要先定义一个模型对象,然后添加一系列验证规则,最后调用验证方法进行验证。下面,我们来看一个简单的示例。
-- -------------------- ---- ------- ----- ---------- - --------------------------------------- -- ---- ---- ----- ---- - --- ---- --- ---- - - ----- --- ---- - -- -- ------ --- ---- - - ----- - ----- --------- ---------- -- ---------- -- -- ---- - ----- --------- ---- -- ---- --- - -- -- -- ---- ------ --- ----- - ---------------- ------ -- -------- - ------------------------------- -
以上代码中,我们定义了一个 user 模型,包含 name 和 age 两个属性。然后,我们定义了一个验证规则 rule,规定了 name 必须是字符串类型,长度在 1 到 10 之间,age 必须是数字类型,数值在 0 到 120 之间。
最后,我们调用 validation 方法进行验证。如果验证不通过,validation.errors 属性会包含错误信息。如果验证通过,validation.errors 属性为空数组。
验证规则
在定义验证规则时,我们可以使用以下属性:
- type:属性的数据类型。目前支持 string、number、boolean、array 和 object 五种类型。
- required:属性是否必填。如果设置为 true,那么属性值不能为空。
- minLength:字符串或数组的最小长度。
- maxLength:字符串或数组的最大长度。
- min:数字或日期的最小值。
- max:数字或日期的最大值。
- pattern:正则表达式模式。仅适用于字符串类型。
- enum:枚举值。属性值必须是枚举列表中的一个。
除了以上属性,我们还可以自定义验证规则。只需要在 rule 中添加一个自定义函数即可。例如:
let rule = { name: { type: "string", validate: function (value) { return value === value.toUpperCase(); } } };
以上代码中,我们定义了一个自定义规则,用于验证 name 属性是否为大写字母。在自定义函数中,返回值为 true 表示验证通过,返回值为 false 表示验证不通过。
数据来源
在实际应用中,我们往往需要从不同的数据来源中获取数据进行验证。例如,有时候我们的数据来自于表单提交,有时候是从数据库中查询到的数据,还有可能是外部接口传来的数据。
对于这种情况,validator-models 提供了两种解决方案:getter 和 adapter。
getter
getter 用于定义数据获取的方式。例如,在我们的示例中,数据来源是一个普通的 JavaScript 对象。那么,getter 就可以定义为一个函数,用于从对象中获取属性值。
let getter = function (obj, key) { return obj[key]; }; let valid = validation(user, rule, {getter: getter});
以上代码中,我们定义了一个 getter 函数,用于从 user 对象中获取属性值。在调用 validation 方法时,将 getter 函数传入 options 参数中即可。
adapter
adapter 用于将数据转换为合适的格式。例如,在我们的示例中,需要将 age 属性从字符串类型转换为数字类型进行验证。那么,adapter 就可以定义为一个函数,用于将字符串转换为数字。
let adapter = function (value, schema) { if (schema.type === "number") { return Number(value); } return value; }; let valid = validation(user, rule, {adapter: adapter});
以上代码中,我们定义了一个 adapter 函数,用于将字符串类型的 age 属性值转换为数字类型。在调用 validation 方法时,将 adapter 函数传入 options 参数中即可。
扩展
虽然 validator-models 自带了很多验证规则,但有时候我们需要更丰富的验证规则。在这种情况下,我们可以通过扩展来实现。
validator-models 预留了一个 extend 方法,可以用于扩展规则。例如,我们想要增加一个验证规则,用于验证用户输入的手机号码格式是否合法。
-- -------------------- ---- ------- --- ---- - - ------ - ----- --------- ------ ---- - -- --- ------ - - ------ -------- ------- - ------ ---------------------------------------- - -- --- ----- - ---------------- ----- -------- ---------
以上代码中,我们创建了一个名为 extend 的对象,用于扩展验证规则。在 extend 对象中,我们为 phone 属性增加了一个自定义规则,用于验证手机号码格式。
消息国际化
validator-models 还提供了国际化支持,可以根据不同的语言环境输出不同的错误消息。要使用国际化功能,需要先定义一个 messages 对象,然后将其传入 validation 方法中。
-- -------------------- ---- ------- --- -------- - - -------- - --------- ---- ----- ---------- ----------------- -- -------- - --------- ------- ----- --- ----- ---------- ---- --- ---- ----- -- -- --- ----------- - -- --- ----- - ---------------- ----- ---------- --------------------
以上代码中,我们创建了一个名为 messages 的对象,用于存储不同语言环境下的错误消息。在调用 validation 方法时,将 messages["zh-cn"] 对象传入 options 参数中即可。
总结
以上就是 validator-models 的详细使用介绍。通过本文的学习,我们了解了 validator-models 的基本用法,以及如何扩展验证规则、使用消息国际化等高级功能。validator-models 是一个简单易用的 npm 包,可以帮助开发者快速编写高质量的前端验证代码,建议大家也可以尝试使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005629c81e8991b448dfc86