UNPKG

angular-nz-input-formats

Version:

Angular directives to validate and format NZ-specific input types

104 lines (83 loc) 3.49 kB
///<reference path="angular-nz-input-formats.ts"/> ///<reference path="simple-input-mask.directive.ts"/> module NZInputFormats { export class NZPhoneNumber extends SimpleInputMask { defaultMask:string = '9999999999999'; mobileMask:string = '999 999 99999'; intlMobileMask:string = '9999 999 99999'; landlineMask:string = '99 999 9999'; intlLandlineMask:string = '999 999 9999'; specialMask:string = '9999 999 999 9999'; intlSpecialMask:string = '99999 999 999 9999'; public directiveName:string = 'nzPhoneNumber'; minLength = 0; constructor() { super(); this.setMask(this.defaultMask); } public static Directive($document):angular.IDirective { return SimpleInputMask.Directive($document, NZPhoneNumber); } protected formatter(output:string):string { if (!output) { return output; } var raw = NZPhoneNumber.sanitise(output); if (angular.isDefined(this.options['intl'])) { if (this.options['intl']) { raw = raw.match(/^(?:64.*|6)?/)[0]; } else { raw = raw.match(/^(?:0.*)?/)[0]; } } var intl = raw.match(/^(64|6$)/); if (intl) { raw = '0' + raw.substr(2); } var type; if (raw.match(/^0[89]0/)) { type = 'special'; this.setMask(intl ? this.intlSpecialMask : this.specialMask); this.minLength = intl ? 11 : 10; } else if (raw.substr(0, 2) === '02') { type = 'mobile'; this.setMask(intl ? this.intlMobileMask : this.mobileMask); this.minLength = intl ? 10 : 9; } else if (raw.match(/^0[345679]/)) { type = 'landline'; this.setMask(intl ? this.intlLandlineMask : this.landlineMask); this.minLength = intl ? 10 : 9; } else { type = 'other'; this.setMask(this.defaultMask); this.minLength = 9; } switch (this.options['type']) { case 'special': raw = raw.match(/^(?:0[89]0.*|0[89]|0)?/)[0]; break; case 'mobile': raw = raw.match(/^(?:02.*|0)?/)[0]; break; case 'landline': raw = raw.match(/^(?:0[345679].*|0)?/)[0]; break; } output = intl ? raw.replace(/^0/, intl[0]) : raw; return super.formatter(output); } protected validator() { var value = this.ctrl.$viewValue; if (angular.isUndefined(value) || value === null || value === '' || value !== value /*NaN*/) { // No validation for an undefined model value return true; } value = NZPhoneNumber.sanitise(value); return value.length === 0 || value.length >= this.minLength; } private static sanitise(input) { return String(input).replace(/\D/g, ''); } } module.directive('nzPhoneNumber', ['$document', NZPhoneNumber.Directive]); }