如何编写一个在文本框中输入的指令,只允许一些基于正则表达式的字符?

时间:2018-01-25 04:40:41

标签: angular typescript

如果我有[a-z]这样的正则表达式,该指令应检查正则表达式,并且只允许使用小写字母,如果尝试输入其他字符,则不应键入,就好像它没有输入一样。我已经完成了文档,但没有理解。

1 个答案:

答案 0 :(得分:0)

我已经分叉了一个现有的掠夺者,以满足您的要求。

该指令看起来像这样:

import { Directive, ElementRef, HostListener, Input } from '@angular/core';

@Directive({
  selector: '[OnlyLowerCaseAlphabets]'
})
export class OnlyLowerCaseAlphabets {

  constructor(private el: ElementRef) { }

  @Input() OnlyLowerCaseAlphabets: boolean;

  private regex: RegExp = new RegExp( /^[a-z]+$/);

  @HostListener('keydown', [ '$event' ])
  onKeyDown(event: KeyboardEvent) {


    // Do not use event.keycode this is deprecated.
    // See: https://developer.mozilla.org/en-
    // US/docs/Web/API/KeyboardEvent/keyCode
    let current: string = this.el.nativeElement.value;
    // We need this because the current value on the DOM element
    // is not yet updated with the value from this event
    let next: string = current.concat(event.key);
    if (next && !String(next).match(this.regex)) {
        event.preventDefault();
    }
   }

}

以下是吸虫:

https://embed.plnkr.co/M6gYgSxeuw7wW6rfoWEZ/