number-derictive.directive.ts 844 B

123456789101112131415161718192021222324252627282930
  1. import { Directive, ElementRef, HostListener } from '@angular/core';
  2. @Directive({
  3. selector: '[appNumberDerictive]'
  4. })
  5. export class NumberDerictiveDirective {
  6. private regex: RegExp = new RegExp(/^[0-9]+(\.[0-9]*){0,1}$/g);
  7. private specialKeys: Array<string> = [ 'Backspace', 'Tab', 'End', 'Home' ];
  8. constructor(private el: ElementRef) {
  9. }
  10. @HostListener('keydown', [ '$event' ])
  11. onKeyDown(event: KeyboardEvent) {
  12. // Allow Backspace, tab, end, and home keys
  13. if (this.specialKeys.indexOf(event.key) !== -1) {
  14. return;
  15. }
  16. let current: string = this.el.nativeElement.value;
  17. let next: string = current.concat(event.key);
  18. if (next && !String(next).match(this.regex) || next.length > 10) {
  19. event.preventDefault();
  20. }
  21. }
  22. }