{"id":21214286,"url":"https://github.com/goindow/form-batch-validator","last_synced_at":"2025-03-15T00:19:40.855Z","repository":{"id":57240244,"uuid":"135693371","full_name":"goindow/form-batch-validator","owner":"goindow","description":"批量验证器，内置常用验证规则，支持自定义标签、错误提示、验证规则、国际化等","archived":false,"fork":false,"pushed_at":"2018-06-04T05:57:41.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-13T03:02:27.593Z","etag":null,"topics":["js-validator","validator"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/goindow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-01T08:53:11.000Z","updated_at":"2021-12-27T09:37:11.000Z","dependencies_parsed_at":"2022-08-30T00:11:45.526Z","dependency_job_id":null,"html_url":"https://github.com/goindow/form-batch-validator","commit_stats":null,"previous_names":["76788424/form-batch-validator"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goindow%2Fform-batch-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goindow%2Fform-batch-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goindow%2Fform-batch-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goindow%2Fform-batch-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/goindow","download_url":"https://codeload.github.com/goindow/form-batch-validator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243663598,"owners_count":20327310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["js-validator","validator"],"created_at":"2024-11-20T21:27:08.017Z","updated_at":"2025-03-15T00:19:40.827Z","avatar_url":"https://github.com/goindow.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# form-batch-validator\n批量验证器\n\n## 特性\n- 批量验证表单字段\n- 内置常用的验证器\n- 支持自定义标签\n- 支持自定义验证器\n- 支持自定义错误信息\n- 支持错误信息国际化\n\n## 依赖\n- [is](https://github.com/enricomarino/is/tree/982047c7013a2f460d2b5d5046133a46bf39fe95)\n\n## 安装\n```bash\nnpm install form-batch-validator --save\n```\n\n## 示例\n```js\nconst Validator = require('form-batch-validator');\nconst validator = new Validator();\n\nconst obj = { ... };\nconst rules = { ... };\n\nlet res = validator.validate(rules, obj);\n```\n\n## 国际化\n- 在 error_i18n 下，新建错误信息对应的语言文件\n- 实例化的时候，将对应语言文件名传入对象中\n- 框架本身自带两种语言(zh_cn、en_us)，默认语言为 zh_cn\n```js\n// touch i18n.js\nconst Validator = require('form-batch-validator');\nconst validator = new Validator({ lang: 'en_us' });\n```\n\n## 自定义标签\n- 使用 label(eg:用户名) 指定待检测属性的标签，如果未定义，则使用属性名(eg:username)代替\n```js\nconst rules = {\n  usernmae: {\n    label: '用户名'\n    rules: { ... }\n  }\n}\n```\n\n## 自定义错误信息\n- 使用 msg 指定待检测属性的自定义错误信息\n- 在错误信息中，将使用 label 的值来替换 \"${label}\"，把标签带入到具体的错误中\n- 内置验证器都有默认的错误信息，如果不符合开发者的需求，可以使用自定义错误信息，或配置全局的错误信息语言文件，来替换掉默认的提示\n```js\nconst rules = {\n  gender: {\n    label: '性别',\n    rules: [\n      { type: 'required' },\n      { type: 'in', rules: ['male', 'female', 'unknown'], msg: '${label}只能是男/女/未知' },\n    ]\n  }\n}\n```\n\n## 自定义验证器\n- 内置的验证器不满足需求时，允许用户自定义验证器\n- addValidator，第一个参数为验证器类型(名称唯一)，在定义验证规则的时候，通过该参数指定使用的验证器\n- addValidator，第二个参数为一个回调方法，在回调方法实现验证逻辑\n```js \n// 自定义验证器\nvalidator.addValidator('a', (label, rule, obj) =\u003e {\n  if (obj != 'a') {\n    return rule.msg ? rule.msg : '[' + label + '] ' + 'shoud be equal a'\n  }\n});\n\n// 使用验证器\nconst rules = {\n  attribute: { type: 'a' }\n}\n```\n\n## 内置验证器\n- [requiredValidator](#requiredvalidator)\n- [stringValidator](#stringvalidator)\n- [intValidator](#intvalidator)\n- [numberValidator](#numbervalidator)\n- [inValidator](#invalidator)\n- [lengthValidator](#lengthvalidator)\n- [rangeValidator](#rangevalidator)\n- [regexValidator](#regexvalidator)\n- [dateValidator](#datevalidator)\n- [timeValidator](#timevalidator)\n- [datetimeValidator](#datetimevalidator)\n- [emailValidator](#emailvalidator)\n- [urlValidator](#urlvalidator)\n- [mobileValidator](#mobilevalidator)\n- [objectValidator](#objectvalidator)\n- [arrayValidator](#arrayvalidator)\n\n### requiredValidator\n- 必填验证器\n- 被验证字段为空值，将返回错误\n- 被验证字段未定义 required 将被视为非必填，如果字段的值为空值，我们将忽略该字段的所有验证规则\n- 0、\"\"、{}、[]、undefined、NaN、null 都将被视为空值\n```js\nconst rules = {\n  username: {\n    rules: { type: 'required' }\n  }\n}\n```\n\n### stringValidator\n- 字符串验证器，通常要配合其他的验证器\n```js\nconst rules = {\n  username: {\n    rules: [\n      { type: 'string' },\n      { type: 'length', rules: ['~', 6, 15] }\n    ]\n  }\n}\n```\n\n### intValidator\n- 整型验证器\n```js\nconst rules = {\n  age: {\n    rules: { type: 'int' }\n  }\n}\n```\n\n### numberValidator\n- 数值验证器\n```js\nconst rules = {\n  size: {\n    rules: { type: 'number' }\n  }\n}\n```\n\n### inValidator\n- 枚举验证器\n```js\nconst rules = {\n  gender: {\n    rules: { type: 'in', rules: ['male', 'female', 'unknown'] },\n  }\n}\n```\n\n### lengthValidator\n- 长度验证器，只能配合 intValidator、stringValidator、arrayValidator 来使用，如果被验证字段不是上诉类型将抛出异常\n- 必须要定义 rules 数组，rules[0]定义判断类型，rules[1]定义下限，rules[2]定义上限，rules[1]、rules[2]都是闭区间\n- rules[0] 取值有 \\~、\u003e、\u003e=、=、\u003c、\u003c=，\\~ 表示区间\n- 如果被检测字段是 int 型，它将被转换为 string 来检测长度\n```js\nconst rules = {\n  username: {\n    rules: [\n      { type: 'string' },\n      { type: 'length', rules: ['~', 6, 15] }\n    ]\n  }\n}\n```\n\n### rangeValidator\n- 大小验证器，只能配合 intValidator、numberValidator 来使用，如果被验证字段不是上诉类型将抛出异常\n- 必须要定义 rules 数组，rules[0]定义判断类型，rules[1]定义下限，rules[2]定义上限，rules[1]、rules[2]都是闭区间\n- rules[0] 取值有 \\~、\u003e、\u003e=、=、\u003c、\u003c=，\\~ 表示区间\n```js\nconst rules = {\n  size: {\n    rules: [\n      { type: 'number' },\n      { type: 'range', rules: ['\u003e=', 36] }\n    ]\n  }\n}\n```\n\n### regexValidator\n- 正则验证器\n- 必须要定义 rules 正则\n```js\nconst rules = {\n  mobile: {\n    rules: { type: 'regex', rules: /^[1][3,4,5,6,7,8,9][0-9]{9}$/ },\n  }\n}\n```\n\n### dateValidator\n- 日期验证器，默认正则 /^\\d{4}\\-\\d{2}\\-\\d{2}$/\n- 如果默认的格式不符合，可以使用 rules 传入自定义正则进行校验\n```js\nconst rules = {\n  date: {\n    rules: { type: 'date' }\n  }\n}\n\n// 自定义正则\nconst rules = {\n  date: {\n    rules: { type: 'date', rules: /^\\d{4}\\-\\d{1,2}\\-\\d{1,2}$/ }\n  }\n}\n```\n\n### timeValidator\n- 时间验证器，默认正则 /^\\d{2}:\\d{2}:\\d{2}$/\n- 如果默认的格式不符合，可以使用 rules 传入自定义正则进行校验\n```js\nconst rules = {\n  time: {\n    rules: { type: 'time' }\n  }\n}\n\n// 自定义正则\nconst rules = {\n  time: {\n    rules: { type: 'time', rules: /^\\d{2}:\\d{2}$/ }\n  }\n}\n```\n\n### datetimeValidator\n- 日期时间验证器，默认正则 /^\\d{4}\\-\\d{2}\\-\\d{2} \\d{2}:\\d{2}:\\d{2}$/\n- 如果默认的格式不符合，可以使用 rules 传入自定义正则进行校验\n```js\nconst rules = {\n  datetime: {\n    rules: { type: 'datetime' }\n  }\n}\n\n// 自定义正则\nconst rules = {\n  time: {\n    rules: { type: 'datetime', rules: /^\\d{4}\\-\\d{1,2}\\-\\d{1,2} \\d{2}:\\d{2}$/ }\n  }\n}\n```\n\n### emailValidator\n- 邮箱验证器，默认正则 /^[a-z0-9\\!\\#\\$\\%\\\u0026\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+(?:\\.[a-z0-9\\!\\#\\$\\%\\\u0026\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+)*@(?:[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?$/i\n- 如果默认的格式不符合，可以使用 rules 传入自定义正则进行校验\n```js\nconst rules = {\n  email: {\n    rules: { type: 'email' }\n  }\n}\n```\n\n### urlValidator\n- url 验证器，默认正则 /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:\\/\\S*)?$/i;\n- 如果默认的格式不符合，可以使用 rules 传入自定义正则进行校验\n```js\nconst rules = {\n  url: {\n    rules: { type: 'url' }\n  }\n}\n```\n\n### mobileValidator\n- 中国大陆手机号验证器，默认正则 /^[1][3,4,5,6,7,8,9][0-9]{9}$/\n- 如果默认的格式不符合，可以使用 rules 传入自定义正则进行校验\n```js\nconst rules = {\n  mobile: {\n    rules: { type: 'mobile' }\n  }\n}\n```\n\n### objectValidator\n- 纯对象验证器，支持属性的递归校验\n- 如果需要属性的递归校验，可以使用 rules 传入属性的验证规则\n```js\n// 对象类型校验\nconst rules = {\n  object: {\n    rules: { type: 'object' }\n  }\n}\n\n// 对象属性的递归校验\nconst rules = {\n  object: {\n    label: '对象'\n    rules: {\n      type: 'object',\n      rules: {\n        attr1: {\n          label: '属性1',\n          rules： { type： 'string' }\n        },\n        attr2: {\n          label: '属性2'\n          rules： [\n            { type: 'required' },\n            { type: 'object', rules: { //... } }\n          ]\n        }\n        // ...\n      }\n    }\n  }\n}\n```\n\n### arrayValidator\n- 数组验证器，支持元素校验\n- 如果需要元素校验，可以使用 rules 传入元素的验证规则\n```js\n// 数组类型校验\nconst rules = {\n  array: {\n    rules: { type: 'array' }\n  }\n}\n\n// 数组元素校验\nconst rules = {\n  array: {\n    label: '数组',\n    rules: {\n      type: 'array',\n      rules: {\n        type: 'object',\n        rules: {\n          attr1: {\n            label: '属性1',\n            rules: [ { type: 'required' }, { type: 'string'} ]\n          },\n          attr2: {\n            label: '属性2'\n            rules: { type: 'in', rules: [1, 2, 3]}\n          }\n        }\n      }\n    }\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoindow%2Fform-batch-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoindow%2Fform-batch-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoindow%2Fform-batch-validator/lists"}