【问题标题】:Formgroup Validator only verify the first letterFormgroup Validator 只验证首字母
【发布时间】:2020-10-05 14:31:49
【问题描述】:

我在我的 ts 文件中创建了一个带有值的 formGroup: 构造函数:

constructor(private formBuilder: FormBuilder) { }

我创建了我的小组:

testForm: FormGroup;

并初始化它的值:

this.testForm= this.formBuilder.group({
     name: ['', [Validators.required],
});

当我按下按钮发送表单时,我的验证器完成了这项工作。

onSubmit() {
    this.submitted = true;

    if (this.testForm.invalid) {
      console.log("invalid");
      console.log(this.findInvalidControls())
      return;
    }

    alert('SUCCESS!! :-)\n\n' + JSON.stringify(this.testForm.value));
  }

这行得通,所以我决定添加一个新的验证器,以便我的名字不为空并且只包含 LETTER。 所以我添加了一个新的验证器:

name: ['', [Validators.required, Validators.pattern('[A-Za-z]')]],

这不起作用并告诉我我的表格无效... 所以我创建了一个新函数来检查这样的错误:

findInvalidControls() {
    const invalid = [];
    const controls = this.testForm.controls;
    for (const name in controls) {
      if (controls[name].errors) {
        invalid.push(name);
      }
    }
    return invalid;
  }

如果它是无效的,我会在我的提交中调用这个函数,我可以看到我的名字在数组中(所以它是无效的)。但为什么呢?

我知道如果我只写了 1 封信,那么表格是有效的,但如果我写了超过 1 封信,那么表格将是无效的。 为什么我的验证器只检查 1 个字母?如果我有更多,那是假的?

【问题讨论】:

  • 你能创建 stackblitz 吗?
  • 模式必须是^[A-Z|a-z]+$。在regex101.com 中简要解释一下表达式:^ 必须存在 [A-Z|a-z] A-Z 或 a-z + 中的任何字符重复这么多次你想要并且 $ 没有更多

标签: javascript angular formgroups


【解决方案1】:

您的代码按预期工作。您的表单显示仅对一个字母有效,因为这是您指定的模式。

[A-Za-z] 只会检查输入的第一个字符是否为字母。您必须指定允许启用的字符数。阅读RegExp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2016-10-07
    • 2023-03-31
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多