{"id":13495823,"url":"https://github.com/Nightapes/ngx-validators","last_synced_at":"2025-03-28T17:34:04.267Z","repository":{"id":46119378,"uuid":"58481337","full_name":"Nightapes/ngx-validators","owner":"Nightapes","description":"Validator library for Angular 2+","archived":false,"fork":false,"pushed_at":"2021-11-14T11:38:14.000Z","size":2843,"stargazers_count":136,"open_issues_count":2,"forks_count":26,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-24T07:42:51.180Z","etag":null,"topics":["angular","angular2","angular4","angular7","credit-card","ngx-validators","phone","typescript"],"latest_commit_sha":null,"homepage":"https://nightapes.github.io/ngx-validators","language":"TypeScript","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/Nightapes.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":"2016-05-10T17:36:36.000Z","updated_at":"2024-08-28T06:56:14.000Z","dependencies_parsed_at":"2022-09-03T22:02:39.037Z","dependency_job_id":null,"html_url":"https://github.com/Nightapes/ngx-validators","commit_stats":null,"previous_names":["nightapes/ng2-validators"],"tags_count":36,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nightapes%2Fngx-validators","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nightapes%2Fngx-validators/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nightapes%2Fngx-validators/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nightapes%2Fngx-validators/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nightapes","download_url":"https://codeload.github.com/Nightapes/ngx-validators/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222162203,"owners_count":16941513,"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":["angular","angular2","angular4","angular7","credit-card","ngx-validators","phone","typescript"],"created_at":"2024-07-31T19:01:38.593Z","updated_at":"2024-10-31T11:30:22.316Z","avatar_url":"https://github.com/Nightapes.png","language":"TypeScript","readme":"# ngx-validators\n\nAn implementation of various angular validators for Angular 13+.\n\nFor Angular \u003c 12.x.x use version `v5.4.0`\n\n# List of validators\n\n1. Password\n1. Email\n1. Universal\n1. Creditcards\n\nFor validation of phone numbers see: [ngx-phone-validators](https://github.com/Nightapes/ngx-phone-validators)\n\n# Install\n\n`npm install ngx-validators --save-dev`\n\n## [Angular CLI](https://github.com/angular/angular-cli)\n\nNo config needed\n\n## [Angular Seed](https://github.com/mgechev/angular-seed)\n\nAdd following to `project.config.ts`\n\n```ts\nlet additionalPackages: ExtendPackages[] = [\n  {\n    name: \"ngx-validators\",\n    path: \"node_modules/ngx-validators/bundles/ngx-validators.umd.min.js\",\n  },\n];\n\nthis.addPackagesBundles(additionalPackages);\n```\n\n## Password validators\n\nThe rules are from https://github.com/vt-middleware/passay\n\nThe password validators are:\n\n- repeatCharacterRegexRule\n- whitespaceRule (moved to UniversalValidators)\n- allowedCharacterRule\n- alphabeticalCharacterRule\n- digitCharacterRule\n- lowercaseCharacterRule\n- uppercaseCharacterRule\n- specialCharacterRule\n- more will come\n\n## Email validators\n\n- simple (only checks if it looks like a mail)\n- normal (follows the [HTML5](https://www.w3.org/TR/html5/forms.html#valid-e-mail-address) rules)\n\n## Universal validators\n\n- noWhitespace\n- noEmptyString\n- isNumber\n- isInRange\n- minLength\n- maxLength\n\n## Creditcard validators\n\n- americanexpress\n- visa\n- dinersclub\n- discover\n- jcb\n- maestro\n- mastercard\n\n## Install\n\n```\nnpm install ngx-validators --save\n```\n\n## How to use [model driven]\n\nneeds: `ReactiveFormsModule`\n\n### Passwords\n\n```ts\nimport {PasswordValidators} from 'ngx-validators'\n\n...\npassword: FormControl = new FormControl('', Validators.compose([\n    PasswordValidators.repeatCharacterRegexRule(4),\n    PasswordValidators.alphabeticalCharacterRule(1),\n    PasswordValidators.digitCharacterRule(1),\n    PasswordValidators.lowercaseCharacterRule(1),\n    PasswordValidators.uppercaseCharacterRule(1),\n    PasswordValidators.specialCharacterRule(1),\n    PasswordValidators.allowedCharacterRule(['a', 'b'])\n    ]));\n```\n\n### Password mismatch\n\n```ts\nimport {PasswordValidators} from 'ngx-validators'\n\n...\n\nlet password: FormControl = new FormControl('testPassword');\nlet confirmPassword: FormControl = new FormControl('testPassword');\nlet form = new FormGroup({\n    'newPassword': password,\n    'confirmPassword': confirmPassword\n}, PasswordValidators.mismatchedPasswords()\n);\n\n```\n\n#### Override control name\n\n```ts\nimport {PasswordValidators} from 'ngx-validators'\n\n...\n\nlet password: FormControl = new FormControl('testPassword');\nlet confirmPassword: FormControl = new FormControl('testPassword');\nlet form = new FormGroup({\n    'testName': password,\n    'testName2': confirmPassword\n}, PasswordValidators.mismatchedPasswords('testName', 'testName2' )\n);\n\n```\n\n### Email\n\n```ts\nimport {EmailValidators} from 'ngx-validators'\n\n...\n\nemail: FormControl = new FormControl('', EmailValidators.normal);\nemail2: FormControl = new FormControl('', EmailValidators.simple);\nemail3: FormControl = new FormControl('', EmailValidators.suggest);\n```\n\n### Universal\n\n```ts\nimport {UniversalValidators} from 'ngx-validators'\n\n...\n\ncontrol: FormControl = new FormControl('', UniversalValidators.noWhitespace);\ncontrol: FormControl = new FormControl('', UniversalValidators.isNumber);\ncontrol: FormControl = new FormControl('', UniversalValidators.isInRange(2, 5));\ncontrol: FormControl = new FormControl('', UniversalValidators.minLength(2));\ncontrol: FormControl = new FormControl('', UniversalValidators.maxLength(7));\ncontrol: FormControl = new FormControl('', UniversalValidators.min(2));\ncontrol: FormControl = new FormControl('', UniversalValidators.max(2));\n```\n\n### Creditcards\n\n```ts\nimport {CreditCardValidators} from 'ngx-validators'\n\n...\n\ncontrol: FormControl = new FormControl('', UniversalValidators.isCreditCard);\ncontrol: FormControl = new FormControl('', UniversalValidators.americanExpress);\ncontrol: FormControl = new FormControl('', UniversalValidators.dinersclub);\ncontrol: FormControl = new FormControl('', UniversalValidators.discover);\ncontrol: FormControl = new FormControl('', UniversalValidators.jcb);\ncontrol: FormControl = new FormControl('', UniversalValidators.maestro);\ncontrol: FormControl = new FormControl('', UniversalValidators.mastercard);\ncontrol: FormControl = new FormControl('', UniversalValidators.visa);\n\n```\n\n## How to use [template driven]\n\nneeds `FormsModule and ValidatorsModule`\n\n```ts\nimport { NgModule } from \"@angular/core\";\nimport { BrowserModule } from \"@angular/platform-browser\";\nimport { FormsModule } from \"@angular/forms\";\nimport { ValidatorsModule } from \"ngx-validators\";\n\nimport { AppComponent } from \"./app.component\";\n\n@NgModule({\n  imports: [BrowserModule, FormsModule, ValidatorsModule],\n  declarations: [AppComponent],\n  bootstrap: [AppComponent],\n})\nexport class AppModule {}\n```\n\n### Password\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"password\" [(ngModel)]=\"model.password\" name=\"password\" #formControl=\"ngModel\" password /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('repeatCharacterRegexRule')\"\u003ePassword contains repeating characters\u003c/span\u003e\n  \u003cspan *ngIf=\"formControl.hasError('digitCharacterRule')\"\u003ePassword should contain at least on digit\u003c/span\u003e\n  \u003cspan *ngIf=\"formControl.hasError('alphabeticalCharacterRule')\"\n    \u003ePassword should contain at least on alphabetical character\u003c/span\n  \u003e\n  \u003cspan *ngIf=\"formControl.hasError('lowercaseCharacterRule')\"\n    \u003ePassword should contain at least on lowercase character\u003c/span\n  \u003e\n  \u003cspan *ngIf=\"formControl.hasError('uppercaseCharacterRule')\"\n    \u003ePassword should contain at least on uppercase character\u003c/span\n  \u003e\n\u003c/form\u003e\n\n// Override values\n\u003cinput\n  type=\"password\"\n  [(ngModel)]=\"model.password\"\n  name=\"password\"\n  #formControl=\"ngModel\"\n  password\n  [repeatCharacter]=\"2\"\n  [alphabeticalCharacter]=\"2\"\n  [digitCharacter]=\"2\"\n  [lowercaseCharacter]=\"2\"\n  [uppercaseCharacter]=\"2\"\n/\u003e\n```\n\n### Creditcard\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"text\" [(ngModel)]=\"model.creditcard\" name=\"creditcard\" #formControl=\"ngModel\" creditCard /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('creditcard')\"\u003eIs not a creditcard\u003c/span\u003e\n\u003c/form\u003e\n\n// Override values // Test only for a specific creditcard\n\u003cinput\n  type=\"text\"\n  [(ngModel)]=\"model.creditcard\"\n  name=\"creditcard\"\n  #formControl=\"ngModel\"\n  [creditCard]=\"all|americanExpress|dinersclub|discover|jcb|maestro|mastercard|visa\"\n/\u003e\n```\n\n### Email\n\n#### Normal\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"text\" [(ngModel)]=\"model.email\" name=\"email\" #formControl=\"ngModel\" email /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('normalEmailRule')\"\u003eIs not a email\u003c/span\u003e\n\u003c/form\u003e\n```\n\n#### Suggest\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"text\" [(ngModel)]=\"model.email\" name=\"email\" #formControl=\"ngModel\" emailSuggest /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('suggestion')\"\u003eMaybe check the mail again\u003c/span\u003e\n\u003c/form\u003e\n```\n\n### Universal\n\n#### whitespace\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"text\" [(ngModel)]=\"model.firstname\" name=\"firstname\" #formControl=\"ngModel\" noWhitespace /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('noWhitespaceRequired')\"\u003eShould not contain a whitespace\u003c/span\u003e\n\u003c/form\u003e\n```\n\n#### isNumber\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"number\" [(ngModel)]=\"model.amount\" name=\"amount\" #formControl=\"ngModel\" isNumber /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('numberRequired')\"\u003eNeeds to be a number\u003c/span\u003e\n\u003c/form\u003e\n```\n\n#### isInRange\n\n```html\n\u003cform\u003e\n  \u003cinput\n    type=\"number\"\n    [(ngModel)]=\"model.amount\"\n    name=\"amount\"\n    #formControl=\"ngModel\"\n    isInRange\n    [minValue]=\"2\"\n    [maxValue]=\"4\"\n  /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('numberRequired')\"\u003eNeeds to be a number\u003c/span\u003e\n  \u003cspan *ngIf=\"formControl.hasError('rangeValueToSmall')\"\u003eNumber to small\u003c/span\u003e\n  \u003cspan *ngIf=\"formControl.hasError('rangeValueToBig')\"\u003eNumber to big\u003c/span\u003e\n\u003c/form\u003e\n```\n\n#### min\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"number\" [(ngModel)]=\"model.amount\" name=\"amount\" #formControl=\"ngModel\" [min]=\"2\" /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('numberRequired')\"\u003eNeeds to be a number\u003c/span\u003e\n  \u003cspan *ngIf=\"formControl.hasError('min')\"\u003eNumber to small\u003c/span\u003e\n\u003c/form\u003e\n```\n\n#### max\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"number\" [(ngModel)]=\"model.amount\" name=\"amount\" #formControl=\"ngModel\" [max]=\"2\" /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('numberRequired')\"\u003eNeeds to be a number\u003c/span\u003e\n  \u003cspan *ngIf=\"formControl.hasError('max')\"\u003eNumber to small\u003c/span\u003e\n\u003c/form\u003e\n```\n\n#### type\n\n```html\n\u003cform\u003e\n  \u003cinput type=\"number\" [(ngModel)]=\"model.amount\" name=\"amount\" #formControl=\"ngModel\" requireType=\"string\" /\u003e\n  \u003cspan *ngIf=\"formControl.hasError('type')\"\u003eNeeds to be a string\u003c/span\u003e\n\u003c/form\u003e\n```\n\n##Todo\n\n- Add more password rules\n- Add address validator\n\nGet the complete changelog here: https://github.com/Nightapes/ngx-validators/releases\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNightapes%2Fngx-validators","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNightapes%2Fngx-validators","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNightapes%2Fngx-validators/lists"}