Angular Validator.pattern()校验结果与在线正则引擎不一致问题咨询
问题根因
Angular 的 FormBuilder 声明表单控件时,参数顺序固定为 [初始值, 同步校验器列表, 异步校验器列表],多个同步校验器必须放在同一个数组中作为第二个参数传入。你当前的代码中,name 字段的 Validators.pattern 被写在了第三个参数的位置,会被识别为异步校验器,同步校验阶段只会执行 Validators.required,只要输入非空就会判定为合法,和正则本身的规则无关,这就是校验结果不符合预期的核心原因。
解决方法
将 name 字段的所有同步校验器放在同一个数组中作为第二个参数传入即可,正则优先用字面量写法,避免字符串转义带来的额外问题:
// 正则用字面量声明,避免字符串转义问题 const nameRegex = /^[a-zA-Z][a-zA-Z0-9]*$/ this.signupForm = this.formBuilder.group({ name: ['', [Validators.required, Validators.pattern(nameRegex)]], // 多个同步校验器放到同一个数组 email: ['', [Validators.required, Validators.pattern(emailRegex)]], // 目前Angular版本支持直接传校验器数组,不需要使用Validators.compose包裹 password: ['', [Validators.required, Validators.minLength(6)]], c_password: ['', [Validators.required, Validators.minLength(6)]] })
补充说明
如果用字符串格式传入正则,不需要额外加首尾的^和$,Angular的Validators.pattern会自动给字符串格式的正则添加首尾边界符,两种正则写法效果一致。
内容的提问来源于stack exchange,提问作者Md Ahsan Raza
相关产品推荐
相关产品推荐

