validator-pk
Version:
A lightweight library for validating and formatting Pakistani phone numbers and CNIC.
1 lines • 12.6 kB
Source Map (JSON)
{"version":3,"file":"validator-pk.mjs","sources":["../../../projects/validator-pk/src/lib/validator-pk.service.ts","../../../projects/validator-pk/src/lib/validator-pk.component.ts","../../../projects/validator-pk/src/lib/validator-pk.directive.ts","../../../projects/validator-pk/src/lib/validator-pk.module.ts","../../../projects/validator-pk/src/public-api.ts","../../../projects/validator-pk/src/validator-pk.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ValidatorPKService {\r\n\r\n constructor() { }\r\n}\r\n\r\nexport function formatPhoneNumber(phoneNumber: string): string {\r\n let formattedNumber = phoneNumber;\r\n if (phoneNumber.startsWith('+92')) {\r\n formattedNumber = phoneNumber.replace(/^(\\+92)(\\d{3})(\\d{7})$/, '$1 $2 $3');\r\n } else if (phoneNumber.startsWith('03')) {\r\n formattedNumber = phoneNumber.replace(/^(03)(\\d{2})(\\d{7})$/, '$1$2 $3');\r\n }\r\n return formattedNumber;\r\n}\r\n\r\nexport function validatePhoneNumber(phoneNumber: string): { isValid: boolean } {\r\n const validPattern = /^(\\+92\\s?\\d{3}\\s?\\d{7}|03\\d{2}\\s?\\d{7})$/; \r\n return { isValid: validPattern.test(phoneNumber.replace(/\\s+/g, '')) };\r\n}\r\n\r\nexport function validateCNIC(cnic: string): { isValid: boolean } {\r\n const cnicRegex = /^\\d{5}-?\\d{7}-?\\d$/;\r\n return { isValid: cnicRegex.test(cnic) }; \r\n}\r\n\r\nexport function formatCNIC(cnic: string): string {\r\n const sanitizedCNIC = cnic.replace(/-/g, '');\r\n return sanitizedCNIC.replace(/^(\\d{5})(\\d{7})(\\d)$/, '$1-$2-$3');\r\n}","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\r\nimport { formatCNIC, formatPhoneNumber, validateCNIC, validatePhoneNumber } from './validator-pk.service';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-validatorPK',\r\n template: `\r\n <ng-container>\r\n <input\r\n id=\"phone\"\r\n type=\"text\"\r\n [class]=\"class\"\r\n [ngClass]=\"{\r\n 'is-invalid': showError\r\n }\"\r\n [value]=\"phoneNumber\"\r\n (input)=\"onInputChange($event)\"\r\n [placeholder]=\"placeholder\"\r\n />\r\n <p *ngIf=\"errorMessage && showError\" style=\"color: red;\">{{ errorMessage }}</p>\r\n </ng-container>\r\n `,\r\n styles: [],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidatorPKComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class ValidatorPKComponent {\r\n @Output() validChange = new EventEmitter<boolean>();\r\n @Input() errorMessage: string = '';\r\n @Input() class: string = '';\r\n @Input() placeholder: string = 'Enter a phone number';\r\n @Input() autoFormat: boolean = false;\r\n @Input() type: 'phone' | 'cnic' = 'phone';\r\n\r\n private isValid: boolean = false;\r\n\r\n @Input()\r\n get valid(): boolean {\r\n return this.isValid;\r\n }\r\n\r\n // Prevent external modification of `valid`\r\n set valid(value: boolean) {\r\n console.warn('valid is read-only and cannot be set externally.');\r\n }\r\n\r\n phoneNumber: string = '';\r\n showError: boolean = false;\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n onInputChange(event: Event) {\r\n const inputElement = event.target as HTMLInputElement;\r\n let value = inputElement?.value || '';\r\n this.phoneNumber = value;\r\n\r\n if (this.type === 'phone') {\r\n const validation = validatePhoneNumber(this.phoneNumber);\r\n this.isValid = validation.isValid;\r\n\r\n if (this.isValid && this.autoFormat) {\r\n this.phoneNumber = formatPhoneNumber(this.phoneNumber);\r\n value = this.phoneNumber;\r\n }\r\n } else if (this.type === 'cnic') {\r\n const validation = validateCNIC(this.phoneNumber);\r\n this.isValid = validation.isValid;\r\n if (this.isValid && this.autoFormat) {\r\n this.phoneNumber = formatCNIC(this.phoneNumber);\r\n value = this.phoneNumber;\r\n }\r\n }\r\n\r\n this.onChange(value);\r\n this.validChange.emit(this.isValid);\r\n this.showError = !this.isValid;\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.phoneNumber = value || '';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, HostListener, Renderer2 } from '@angular/core';\r\nimport { validatePhoneNumber } from './validator-pk.service';\r\n\r\n@Directive({\r\n selector: '[validatePhone]'\r\n})\r\nexport class ValidatorPkDirective {\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n @HostListener('input', ['$event.target.value'])\r\n onInputChange(value: string) {\r\n const validation = validatePhoneNumber(value);\r\n if (validation.isValid) {\r\n this.renderer.setStyle(this.el.nativeElement, 'border', '1px solid green');\r\n } else {\r\n this.renderer.setStyle(this.el.nativeElement, 'border', '1px solid red');\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { ValidatorPKComponent } from './validator-pk.component';\r\nimport { ValidatorPkDirective } from './validator-pk.directive';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n ValidatorPKComponent,\r\n ValidatorPkDirective\r\n ],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonModule\r\n ],\r\n exports: [\r\n ValidatorPKComponent,\r\n ValidatorPkDirective\r\n ]\r\n})\r\nexport class ValidatorPKModule { }\r\n","/*\n * Public API Surface of validator-pk\n */\n\nexport * from './lib/validator-pk.service';\nexport * from './lib/validator-pk.component';\nexport * from './lib/validator-pk.directive';\nexport * from './lib/validator-pk.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}