Angular / Typescript RegExp枚举

时间:2018-03-01 12:44:05

标签: regex angular typescript

希望为我的应用程序中的某些正则表达式创建枚举以允许代码重用。

例如:

export enum Regex {
    ONE_DANK_REGEX = /^[dank]+$/g,
    FIVE_OUT_OF_SEVEN = /^[meme]{5,7}$/g
}

但是:

  1. 通过不使用字符串文字,我收到TS90010错误:键入RegExpis不能分配给Regex类型。
  2. 通过使用字符串文字,我无法在输入
  3. 的模式属性中使用它们

    例如

    <input ngModel="..." pattern="{{FIVE_OUT_OF_SEVEN}}" .../>
    

    这是正确的做法吗?

3 个答案:

答案 0 :(得分:3)

您无法将RegExp分配给enumenum可以是数字或字符串。

因此,在存储RegExp时,您有两个选择:

选项A - 将RegExp作为字符串存储在枚举中

enum RegExpEnum {
    ONE_DANK_REGEX = "^[dank]+$",
    FIVE_OUT_OF_SEVEN = "^[meme]{5,7}$"
}

选项B - 将RegExp存储在class / variable

class RegexClass {
    public static readonly ONE_DANK_REGEX = /^[dank]+$/g;
    public static readonly FIVE_OUT_OF_SEVEN = /^[meme]{5,7}$/g;
}

您需要在两种方式中获得对组件中包含enumclass的引用。可以通过将其分配给局部变量来实现。

@Component({ ... })
public class MyComponent {
    availableRegex = RegExpEnum; // or RegexClass
}

然后您可以在组件的html部分中访问它。

<input [(ngModel)]="name" [pattern]="availableRegex.ONE_DANK_REGEX"/>

DEMO

答案 1 :(得分:0)

更喜欢上面提到的选项A并在代码下面使用它:

`export enum Regex {
  ONE_DANK_REGEX = "^[dank]+$",
  FIVE_OUT_OF_SEVEN = "^[meme]{5,7}$",

}`

public readonly regOne=new RegExp(Regex.ONE_DANK_REGEX,"g");

这在创建正则表达式对象时提供了一定的灵活性。

答案 2 :(得分:0)

枚举将仅支持字符串和数字。

如果要存储正则表达式,则需要使用静态类

export class RegularExpression
{
    public static ALPHA_CHARACTERS: RegExp = /([^A-Za-z])+/g;
}

用法

'Your_* Name'.replace(RegularExpression.ALPHA_CHARACTERS, '');