Angular和text-mask:用于验证没有特殊字符的输入的正则表达式

时间:2018-03-28 15:36:33

标签: regex angular masking text-mask

我的角度为5" angular2-text-mask":" ^ 8.0.4" https://github.com/text-mask/text-mask/tree/master/angular2

我尝试做的是阻止用户输入特殊字符,但 - ,_,'除外,应该允许name type="text"输入。

这适用于电话号码:

<input [textMask]="{mask: mask}" [(ngModel)]="myModel" type="text"/>

public myModel = ''

public mask = ['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]

但是当我尝试接受多个字母的public mask = [/^[a-zA-Z]+$/];时,我只能写一个。怎么了? 我希望能够输入无限的字母,数字和 - ,_,&#39;

我在https://regex101.com/

测试了我的面具

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

此文本掩码不是正则表达式。文档说明

  

mask是一个数组或函数,用于定义用户输入的方式   将被掩盖。数组中的每个元素都必须是字符串或正则表达式。每个字符串都是掩码中的固定字符,每个正则表达式都是一个接受用户输入的占位符。

你的面具是一个包含一个字符的数组。这意味着它只接受一个匹配/^[a-zA-Z]+$/的字符。

如果你想要多个字符,你需要为每个字符添加一个正则表达式数组,如下所示:

public mask = [/[a-zA-Z]/, /[a-zA-Z]/, /[a-zA-Z]/];

这个面具会接受三个字母。

答案 1 :(得分:1)

我知道这是几个月前发生的,但是我找到了一种方法。

您可以创建一个函数,该函数接收原始值作为参数并返回一个regexp数组。

因此,您基本上只收到原始值,计算长度,然后将掩码推到数组。

我是这样做的:

<input [textMask]="{mask: nameMask, guide: false}" [(ngModel)]="myModel" type="text"/>

nameMask(rawValue: string): RegExp[] {
    const mask = /[A-Za-z]/;
    const strLength = String(rawValue).length;
    const nameMask: RegExp[] = [];

    for (let i = 0; i <= strLength; i++) {
      nameMask.push(mask);
    }

    return nameMask;

}