{"id":19840405,"url":"https://github.com/heyui/hey-validator","last_synced_at":"2025-05-01T19:30:42.286Z","repository":{"id":57263851,"uuid":"87697325","full_name":"heyui/hey-validator","owner":"heyui","description":"Data validator","archived":false,"fork":false,"pushed_at":"2019-08-14T10:17:08.000Z","size":113,"stargazers_count":14,"open_issues_count":1,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-18T00:42:47.576Z","etag":null,"topics":["validation","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/heyui.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2017-04-09T09:29:52.000Z","updated_at":"2020-12-01T09:22:47.000Z","dependencies_parsed_at":"2022-08-25T02:20:51.857Z","dependency_job_id":null,"html_url":"https://github.com/heyui/hey-validator","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyui%2Fhey-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyui%2Fhey-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyui%2Fhey-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyui%2Fhey-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/heyui","download_url":"https://codeload.github.com/heyui/hey-validator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251932566,"owners_count":21667168,"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":["validation","validator"],"created_at":"2024-11-12T12:26:46.879Z","updated_at":"2025-05-01T19:30:41.904Z","avatar_url":"https://github.com/heyui.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Validator\n\n`hey-validator`是配合`heyui`使用的表单数据验证插件，其中集成了常用且多样化的校验方式，包含单个数据校验和多个数据校验，均可进行自定义校验规则，扩展性极强，帮助你解决绝大部分表单验证情况，快速完成应用开发。\n\n## 安装\n\n```sh\nnpm install --save hey-validator\n```\n\n## 文档\n\n### 初始化参数\n```js\n{\n  rules: {},          // 单个数据验证\n  combineRules: {},   // 多个数据合并验证\n  required:[],        // 是否必填\n  int:[],             // 整数\n  number:[],          // 数字\n  email:[],           // 邮箱\n  url:[],             // 网址\n  tel:[],             // 电话号码\n  mobile:[],          // 手机号\n  globalmobile:[]     // 国际号码\n}\n```\n## 示例\n\n### 基础示例\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"金额\" prop=\"amount\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.amount\"\u003e\n    \u003c/FormItem\u003e\n    \u003cFormItem label=\"网址\" prop=\"url\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.url\"\u003e\n    \u003c/FormItem\u003e\n    \u003cFormItem label=\"邮箱\" prop=\"email\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.email\"\u003e\n    \u003c/FormItem\u003e\n    \u003cFormItem label=\"手机\" prop=\"mobile\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.mobile\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        amount: null,\n        url: null,\n        email: null,\n        mobile: null\n      },\n      validRules: {\n        required: ['amount', 'url', 'email', 'mobile'],\n        // 可以这样用\n        rules: {\n          amount: {\n            type: 'number'\n          }\n        },\n        // 也可以这样\n        url: ['url'],\n        email: ['email'],\n        mobile: ['mobile']\n      }\n    }\n  }\n```\n\n### 内置基础类型验证\n```js\nint           // 整数\nnumber        // 数字\nemail         // 邮箱\nurl           // 网址\ntel           // 电话号码\nmobile        // 手机号\nglobalmobile  // 国际号码\n```\n#### 示例1\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"金额\" prop=\"amount\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.amount\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        amount: null\n      },\n      validRules: {\n        rules:{\n          amount: {\n            type: 'number',\n            required: true\n          }\n        }\n      }\n    }\n  }\n  // 当输入字符串的结果\n  {amount: 'a'}   // {a:{message: '不是正确的数字格式', type: 'base', valid: false}}\n```\n#### 示例2\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"金额\" prop=\"mobile\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.mobile\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        mobile: null\n      },\n      validRules{\n        rules:{\n          mobile: {\n            type: 'mobile',\n            required: true\n          }\n        }\n      }\n    }\n  }\n  //空验证\n  {mobile: ''}    // {a:{message: '不能为空', type: 'base', valid: false}}\n  //手机号码格式验证\n  {mobile: 123}   // {a:{message: '不是正确的手机号码格式', type: 'base', valid: false}}\n```\n\n### 基础校验\n```js\n  required    // 是否必填\n  maxLen      // 最大长度\n  minLen      // 最小长度\n  max         // 最大值\n  min         // 最小值 \n``` \n#### 示例：最大长度\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"长度测试\" prop=\"a\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.a\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        a: null\n      },\n      validRules: {\n        rules:{\n          a: {\n            maxLen: 5\n          }\n        }\n      }\n    }\n  }\n  // 长度验证结果\n  {a: 'aaaaaa'}   // {a:{message: '文字长度不能超过5个字', type: 'base', valid: false}}\n```\n#### 示例：最大值\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"最大值\" prop=\"a\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.a\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        a: null\n      },\n      validRules: {\n        rules:{\n          a: {\n            type: 'number',\n            max: 9\n          }\n        }\n      }\n    }\n  }\n  //最大值验证\n  {a: 99}   // {a:{message: '不能大于9', type: 'base', valid: false}}\n```\n\n### 自定义验证方式\n\n#### 示例1：正则表达式校验\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"数字\" prop=\"a\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.a\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        a: null\n      },\n      validRules: {\n        rules:{\n          a: {\n            valid: {\n              pattern: /^[0-9]+$/,\n              message: '请输入正确的数字格式'\n            },\n            max: 99\n          }\n        }\n      }\n    }\n  }\n  // 数字格式验证\n  {a: 'a'})   // {a:{message: '请输入正确的数字格式', type: 'base', valid: false}}\n  //最大值验证\n  {a: 100}    // {a:{message: '不能大于99', type: 'base', valid: false}}\n```\n\n#### 示例2：使用valid方法进行验证\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"valid\" prop=\"a\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.a\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        a: null\n      },\n      validRules: {\n        rules:{\n          a: {\n            type: 'number',\n            valid(prop, parent, data) {\n              if(prop\u003c 0 || prop \u003e 100) {\n                  return '必须介于0至100之间'\n              }\n              return true;\n            }\n          }\n        }\n      }\n    }\n  }\n  // 原生valid验证\n  {a: -1}  // {a:{message: '必须介于0至100之间', type: 'base', valid: false}}\n```\n### 异步validAsync验证\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"validAsync\" prop=\"a\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.a\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        a: null\n      },\n      validRules: {\n        rules:{\n          a: {\n            type: 'number',\n            validAsync(prop, next, parent , data){\n              $.ajax('/test').then((resp)){\n                if(resp.isExsit){\n                  next(\"已存在\");\n                }\n                if(resp.value \u003c 0 || resp.value \u003e 100) {\n                  next('必须介于0至100之间')\n                }\n                next()\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  // 异步valid\n  // {a:{message: '必须介于0至100之间', type: 'base', valid: false}}\n```\n\n### 多个数据合并验证\n补充说明：多个数据是指`combineRules`对象中的`refs`属性中的数据，`valid`方法中的参数依次代表`refs`中的参数，顺序保持一致。\n\n#### 示例1\n```html\n  \u003cForm :model=\"model\" :rules=\"validRules\" ref=\"form\"\u003e\n    \u003cFormItem label=\"数据b\" prop=\"b\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.b\"\u003e\n    \u003c/FormItem\u003e\n    \u003cFormItem label=\"数据c\" prop=\"c\"\u003e\n      \u003cinput type=\"text\" v-model=\"model.c\"\u003e\n    \u003c/FormItem\u003e\n  \u003c/Form\u003e\n```\n```js\n  data() {\n    return {\n      model: {\n        b: null,\n        c: null\n      },\n      validRules: {\n        combineRules:[{\n          // parentRef: 'e[]', // 如果验证的是子级的数据，则需要定义父级\n          refs: ['b', 'c'],\n          valid(valueb,valuec){\n            if(valueb \u003e valuec){\n              return \"b不能大于c\";\n            }\n            return true;\n          }\n        }]\n      }\n    }\n  }\n  // 合并验证，这里需要注意的是默认会报错在最后一个数据，也就是会在页面上对应数据的地方报错提醒\n  {b: 3, c:2}   // {b:{message: null, type: \"base\", valid: true}} {c: {message: \"b不能大于c\", type: \"combine\", valid: false}}\n```\n#### 示例2：子级数据验证\n```js\n  data() {\n    return {\n      model: {\n        b: null,\n        c: null\n      },\n      validRules: {\n        combineRules:[{\n          parentRef: 'e[]', // 如果验证的是子级的数据，则需要定义父级\n          refs: ['b', 'c'],\n          valid(valueb,valuec){\n            if(valueb \u003e valuec){\n              return \"b不能大于c\";\n            }\n            return true;\n          }\n        }]\n      }\n    }\n  }\n  // 合并验证，这里需要注意的是默认会报错在最后一个数据，也就是会在页面上对应数据的地方报错提醒\n  {e:[{b: 1, c:2}, {b: 3, c: 2}]}\n  // e: {message: null, type: \"base\", valid: true}\n  // e[0]: {message: null, type: \"base\", valid: true}\n  // e[0].b: {message: null, type: \"combine\", valid: true}\n  // e[0].c: {message: null, type: \"combine\", valid: true}\n  // e[1]: {message: null, type: \"base\", valid: true}\n  // e[1].b: {message: null, type: \"base\", valid: true}\n  // e[1].c: {message: \"b不能大于c\", type: \"combine\", valid: false}\n```\n\n#### 示例3：内置合并验证规则\n```js\n  // lessThan b小于c\n  // greaterThan b大于c\n  // equal b等于c\n  {\n    refs: ['b', 'c'],\n    valid: {\n      valid: 'lessThan',\n      message: \"开始时间必须小于结束时间\"\n    }\n  }\n```\n\n## 方法\n方法名 | 说明 | 参数 | 返回值  \n-|-|-|-\nvalid | 校验方法 | data,next:Function,allNext:Function | 无\ngetConfig | 获取相关配置 | prop | 对应数据的校验配置\nsetConfig | 设置相关配置 | prop, options | 无\nvalidField | 校验部分数据 | prop,data,next:Function | 校验结果\ndestroy | 销毁实例 | 无 | 无\n\n#### valid\n```js\n  import HeyValidator from \"hey-validator\"\n  let validator = new HeyValidator({\n    required: ['b'],\n    rules:{\n      b: {\n        type:'int'\n      }\n    }\n  })\n  \n  validator.valid({b: 3.3})   // {b: {message: \"不是正确的整数格式\", type: \"base\", valid: false}}}\n  // next     异步校验只有执行的回调\n  // allNext  多个异步校验全部完成之后执行的回调\n```\n\n#### getConfig\n```js\n  let HeyValidator = require(\"hey-validator\")\n  let validator = new HeyValidator({\n    required: ['b'],\n    rules:{\n        b: {\n            type:'int'\n        }\n    }\n  })\n  validator.getConfig('b')   // {required: true, type: \"int\"}\n```\n\n#### setConfig\n```js\n  let HeyValidator = require(\"hey-validator\")\n  let validator = new HeyValidator({\n    required: ['b'],\n  })\n  let rules = {\n    b: {\n      type:'int'\n    }\n  }\n  validator.setConfig('b',rules);\n  validator.getConfig('b')  // {b: {type: \"int\"}, required: true}\n```\n\n#### validField\n```js\n  let HeyValidator = require(\"hey-validator\")\n  let validator = new HeyValidator({\n    required: ['b','c'],\n    rules:{\n      b: {\n        type: 'int'\n      },\n      c: {\n        type: 'email'\n      }\n    }\n  })\n  validator.validField('b', { b: 3.3 })  // {b: {message: \"不是正确的整数格式\", type: \"base\", valid: false}}\n``` \n\n#### destroy\n```js\n  let HeyValidator = require(\"hey-validator\")\n  let validator = new HeyValidator({\n    required: ['b','c'],\n    rules:{\n      b: {\n        type: 'int'\n      }\n    }\n  })\n  validator.destroy()   //{combineRuleResults: null, combineRules: null, rules: null}\n```\n\n## 相关链接\n\n- [HeyUI](https://www.heyui.top)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheyui%2Fhey-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fheyui%2Fhey-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheyui%2Fhey-validator/lists"}