【发布时间】: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