角度6:Validators.pattern无法正常工作

时间:2018-08-28 10:50:22

标签: angular6

我有一个用于字段的Validators.pattern,这是我对表单进行的唯一验证。

正常使用是可行的。它可以正确验证该字段,但是当您尝试复制和粘贴时会出现问题。

如果您在该字段上重复复制并粘贴到该字段上,就好像该字段的有效性已被切换(如果表单无效,则提交按钮将被禁用)

当我从其他来源(例如搜索或自动建议)中填充数据时,也会发生此问题。

buildForm(obj) {
  this.form = this.fb.group({
    field: [obj['field'] || '', Validators.pattern(/MY_REG_EX_HERE/g)],
    id: [obj['id'] || ''],
  });  
}

2 个答案:

答案 0 :(得分:0)

我不太确定问题的主要原因,但是作为一种解决方法,我使用相同的REGEX创建了自定义验证器。我将其张贴在这里,可能会帮助某人。

import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';

export function customValidator(control: AbstractControl) {
    if (control.value !== '') {
      const isValid = (/MY_REG_EX_HERE/g).test(control.value)
      return isValid ? null : { customValidator: true };
    } else {
      return null;
    }
}

答案 1 :(得分:0)

我遇到了类似的问题。我仔细研究了一下,找到了原因。像我一样,您正在使用 /g 修饰符。如果将正则表达式分配给变量,则会产生副作用。此修饰符指示在字符串中继续搜索。要了解“意外”行为,请查看屏幕截图。
RegExp test with variable
你可以找到more information here