RegExp中字符类的范围乱序

时间:2017-09-26 14:13:54

标签: regex angular angular2-forms

我正在尝试使用表达式^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$验证电子邮件输入,但它会引发错误Range out of order in character class at RegExp。我如何使用该表达式进行验证

 ngOnInit() {
    // created FormGroup using FormBuilder
    this.courseForm = this.fb.group({
      username: [null, [Validators.required, Validators.pattern('^[a-z0-9_-]{3,16}$')]],
      email: [null, [Validators.required, Validators.pattern('^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$')]],
      address: (null),
      select: (null)
    });

2 个答案:

答案 0 :(得分:1)

错误是由于删除了一个\并且您的角色类的一部分看起来像[_-.]。这是一个无效的范围。

模式必须写为

'^([a-zA-Z0-9_.-]+)@([a-zA-Z0-9_.-]+)\\.([a-zA-Z]{2,5})$'

那是:

  • 双重转义\符号
  • -移到角色类的末尾以避免必须将其转义
  • 注意:您也可以省略^$,因为模式会自动包含^$

答案 1 :(得分:1)

使用这样的模式,

Validators.pattern(/^[a-z0-9_-]{3,16}$/) // wrapping the pattern within '/' and '/' (treating as RegExps) instead of treating it as strings