{"id":15561247,"url":"https://github.com/amirvalibeigi/ir-rh-validation","last_synced_at":"2026-05-08T15:49:48.437Z","repository":{"id":57276769,"uuid":"410634486","full_name":"amirValibeigi/ir-rh-validation","owner":"amirValibeigi","description":"validation object and class for react, react-native","archived":false,"fork":false,"pushed_at":"2022-02-22T18:49:57.000Z","size":26,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-03-25T02:02:32.444Z","etag":null,"topics":["class","javascript","object","react","react-native","reactjs","regex","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amirValibeigi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-26T18:46:18.000Z","updated_at":"2022-02-23T12:32:01.000Z","dependencies_parsed_at":"2022-08-29T06:42:10.223Z","dependency_job_id":null,"html_url":"https://github.com/amirValibeigi/ir-rh-validation","commit_stats":null,"previous_names":["amirvalibeigi/ir-rh-validation","rhv79/ir-rh-validation"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amirValibeigi%2Fir-rh-validation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amirValibeigi%2Fir-rh-validation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amirValibeigi%2Fir-rh-validation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amirValibeigi%2Fir-rh-validation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amirValibeigi","download_url":"https://codeload.github.com/amirValibeigi/ir-rh-validation/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246135881,"owners_count":20729072,"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":["class","javascript","object","react","react-native","reactjs","regex","validation","validator"],"created_at":"2024-10-02T16:06:45.485Z","updated_at":"2026-05-08T15:49:48.372Z","avatar_url":"https://github.com/amirValibeigi.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ir-rh-validation\n\n## **installation**\n\n```npm\nnpm install ir-rh-validation\n```\n\n## **Usage**\n\n### import class and operators\n\n```javascript\nimport Validation from \"ir-rh-validation\";\nimport { isEmail } from \"ir-rh-validation/OperatorValidation\";\n\nconst validation = new Validation();\nconst user = {\n  id: 1,\n  name: \"amir\",\n  email: \"amir@example.com\",\n  code: \"1234\",\n  created_at: \"9/15/2021, 5:30:00 AM\",\n  colorSelect: [\"red\", \"red\", \"green\"],\n  history: [\n    { id: 1, site: \"example.com\", timeSecond: 100, urlClick: [\"url1\"] },\n    { id: 2, site: \"example1.com\", timeSecond: 5000, urlClick: [\"url2\"] },\n    { id: 3, site: \"example2.com\", timeSecond: 20000, urlClick: [\"url3\"] },\n  ],\n};\n\nvalidation\n  .validatePromise(user, [\n    {\n      name: \"email\",\n      matches: [isEmail()], //true\n    },\n  ])\n  .then(\n    () =\u003e {\n      //true\n    },\n    (err) =\u003e {\n      //false\n    }\n  );\n```\n\n## example\n\n### regex\n\ncheck regex on String\n\n```javascript\nimport { regex } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"code\",\n    matches: [regex(/^[0-9]*$/g)], //true\n  },\n]);\n```\n\n### hasIn\n\ncheck that object in values is exists\n\n```javascript\nimport { hasIn } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"name\",\n    matches: [hasIn(\"amir\", \"ali\")], //true\n  },\n]);\n```\n\n### hasNotIn\n\ncheck that object in values is not exists\n\n```javascript\nimport { hasNotIn } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"name\",\n    matches: [hasNotIn(\"amir\", \"ali\")], //false\n  },\n]);\n```\n\n### rangeDate\n\ncheck that date has between two date\n\n```javascript\nimport { rangeDate } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"created_at\",\n    matches: [rangeDate(1630458000000, 1632963600000)], //true\n  },\n]);\n```\n\n### minLength\n\ncheck min length of string or array\n\n```javascript\nimport { minLength } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"email\",\n    matches: [minLength(5)], //true\n  },\n]);\n```\n\n### maxLength\n\ncheck max length of string or array\n\n```javascript\nimport { maxLength } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"email\",\n    matches: [maxLength(10)], //false\n  },\n]);\n```\n\n### minNum\n\ncheck min number\n\n```javascript\nimport { minNum } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"id\",\n    matches: [minNum(2)], //false\n  },\n]);\n```\n\n### maxNum\n\ncheck max number\n\n```javascript\nimport { maxNum } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"id\",\n    matches: [maxNum(2)], //true\n  },\n]);\n```\n\n### rangeNum\n\ncheck number in range\n\n```javascript\nimport { rangeNum } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"id\",\n    matches: [rangeNum(0, 1)], //true\n  },\n]);\n```\n\n### unique\n\nunique item in sorted array\n\n```javascript\nimport { unique } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"colorSelect.*\",\n    matches: [unique()], //false\n  },\n]);\n```\n\n### check property in array\n\n```javascript\nimport { rangeNum, hasNotIn } from \"ir-rh-validation/OperatorValidation\";\n\nvalidation.validate(user, [\n  {\n    name: \"history.*.timeSecond\",\n    matches: [rangeNum(100, 100000)], //true\n  },\n  {\n    name: \"history.*.urlClick.*\",\n    matches: [hasNotIn(\"url4\")], //true\n  },\n  {\n    name: \"history.*.site\",\n    matches: [hasNotIn(\"example2.com\")], //false\n  },\n]); /// result false\n```\n\n## customize method\n\n```javascript\nimport { OperatorValidation } from \"ir-rh-validation\";\n\n/**\n *\n * @returns {OperatorValidation\u003cArray\u003cString\u003e\u003e}\n */\nconst hasColor = (color) =\u003e\n  new OperatorValidation(\n    (obj) =\u003e {\n      return obj.includes(color);\n    },\n    \"hasColor\",\n    { color }\n  );\n\nvalidation.validate(user, [\n  {\n    name: \"colorSelect\",\n    matches: [hasColor(\"green\")], //true\n  },\n]);\n```\n\n## Customize Message\n\n```javascript\nconst validation = new Validation(\"fa\", {\n  validations: {\n    string: {\n      max: \"طول متن :attribute باید کمتر از :length باشد.\",\n    },\n  },\n  attributes: {\n    history: {\n      \"*\": {\n        id: \"شماره یکتا\",\n        site: \"هر سایت\",\n      },\n    },\n    colorSelect: \"رنگ انتخابی\",\n  },\n});\n\nif (\n  validation.validate(user, [\n    {\n      name: \"history.*.site\",\n      matches: [maxLength(5)], //false\n    },\n  ]) == false\n) {\n  console.log(validation.getMessageError());\n}\n\nif (\n  validation.validate(user, [\n    {\n      name: \"colorSelect\",\n      matches: [hasIn(\"yellow\")], //false\n    },\n  ]) == false\n) {\n  console.log(validation.getMessageError());\n}\n```\n\noutput 1:\n\n\u003e طول متن هر سایت باید کمتر از 5 باشد.\n\noutput 2:\n\n\u003e مقدار رنگ انتخابی باید شامل (yellow) باشد.\n\n## usage on class\n\n```javascript\nimport Validation from \"ir-rh-validation\";\nimport {\n  isString,\n  maxLength,\n  minLength,\n} from \"ir-rh-validation/OperatorValidation\";\n\nexport default class UserModel extends Validation {\n  name = \"amir\";\n\n  /**\n   * @type {Array\u003cimport(\"ir-rh-validation\").Rule\u003cUserModel\u003e\u003e}\n   */\n  rules = [\n    {\n      name: \"name\",\n      matches: [isString(), minLength(1)],\n    },\n  ];\n\n  /**\n   * @type {Array\u003cimport(\"ir-rh-validation\").Rule\u003cUserModel\u003e\u003e}\n   */\n  rules1 = [\n    {\n      name: \"name\",\n      matches: [isString(), maxLength(3)],\n    },\n  ];\n}\n```\n\n```javascript\nimport {\n  exists,\n  maxLength,\n  minLength,\n} from \"ir-rh-validation/OperatorValidation\";\n\nconst user = new UserModel();\nuser.validateClass(); //true\n\nuser.validateClass(\"rules1\"); //false\n\nuser.validateClass([\n  {\n    name: \"email\",\n    matches: [exists()], //false\n  },\n]);\n```\n\n## String Rules\n\n```javascript\nvalidation.validate(user, [\"email:isEmail,maxLength 16\"]); //true\n```\n\n## methods\n\n- object (array, number, string, ...)\n\n  - [minLength](#minlength)\n  - [maxLength](#maxlength)\n  - empty\n  - notEmpty\n  - isArray\n  - isBoolean\n  - isNumber\n  - isString\n  - isFun\n  - exists\n  - notExists\n  - [hasIn](#hasin)\n  - [hasNotIn](#hasNotin)\n  - isJson\n  - isDate\n  - [rangeDate](#rangedate)\n  - isToday\n\n- number\n\n  - [rangeNum](#rangenum)\n  - [minNum](#minnum)\n  - [maxNum](#maxnum)\n\n- string\n\n  - [regex](#regex)\n  - isEmail\n\n- array\n  - [unique](#unique)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famirvalibeigi%2Fir-rh-validation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famirvalibeigi%2Fir-rh-validation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famirvalibeigi%2Fir-rh-validation/lists"}