Angular2使用regexp验证输入

时间:2017-06-12 10:01:47

标签: javascript regex angular

我想在我的正则表达式中定义符号数量

_keyPress(ptrn: string, event: any) {
    const pattern = new RegExp(ptrn);
    const inputChar = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    const value = event.target.value;
    if (!pattern.test(inputChar) && !pattern.test(value)) {
      event.preventDefault();
      return false;
    }
  }

HTML:

<input (keypress)="_keyPress('[a-z]{,6}', $event)">

但如果我使用数量量词,它就不起作用。谁可以说出了什么问题? https://plnkr.co/edit/fIVAvRJcubzD2SxZqlTY?p=preview

1 个答案:

答案 0 :(得分:1)

首先event.charCode97返回122a-z之间的数字。因此,pattern.test(inputChar)测试总是失败,因为您尝试将数字与字母表进行比较。因此,请将inputChar更改为以下内容:

const inputChar = String.fromCharCode(event.key ? event.which : event.key);

此外,需要使用用户输入的下一个键更新值:

const value = (event.target.value) + inputChar;

我假设您试图限制用户输入除a-z以外的任何键,并且只允许他们输入最多6个字母。因此,最终测试需要||标志而不是&&,因为当两个测试都通过时,应该允许输入,而不仅仅是当其中一个通过时。

if (!pattern.test(inputChar) || !pattern.test(value)) {
      event.preventDefault();
      return false;
    }

这是从您那里分出来的Plnkr demo