Skip to content

Instantly share code, notes, and snippets.

@sankarseran
Created August 2, 2018 12:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sankarseran/b859277d1dd89a16d6a4933aa00580f3 to your computer and use it in GitHub Desktop.
Save sankarseran/b859277d1dd89a16d6a4933aa00580f3 to your computer and use it in GitHub Desktop.
import {Directive, ElementRef, HostListener, Input} from '@angular/core';
@Directive({
selector: '[onlyNumber]'
})
export class OnlyNumberDirective {
@Input()
onlyNumber: boolean;
regexStr = '^[0-9]*$';
constructor(private el: ElementRef) {
}
@HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) {
let e = <KeyboardEvent> event;
if (this.onlyNumber) {
if (
[46, 8, 9, 27, 13, 110, 190, 171].indexOf(e.keyCode) !== -1 ||
// Allow: Ctrl+A
(e.keyCode === 65 && e.ctrlKey === true) ||
// Allow: Ctrl+C
(e.keyCode === 67 && e.ctrlKey === true) ||
// Allow: Ctrl+V
(e.keyCode === 86 && e.ctrlKey === true) ||
// Allow: Ctrl+X
(e.keyCode === 88 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39) ||
// Allow plus button
(e.keyCode === 107) || (e.keyCode === 187)) {
// let it happen, don't do anything
return;
}
let ch = String.fromCharCode(e.keyCode);
let regEx = new RegExp(this.regexStr);
if (regEx.test(ch)) {
return;
} else if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
} else {
return;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment