Regex 验证器作为输入的属性工作,但不作为表单控件的属性工作
我尝试通过表单控件进行验证,但当我通过表单控件使用regex时,它似乎无法正确验证。当我将模式添加到HTML中的输入字段时,它工作得非常好。我正在尝试验证域名Regex 验证器作为输入的属性工作,但不作为表单控件的属性工作,regex,angular,Regex,Angular,我尝试通过表单控件进行验证,但当我通过表单控件使用regex时,它似乎无法正确验证。当我将模式添加到HTML中的输入字段时,它工作得非常好。我正在尝试验证域名 let regexPattern = "^(?!.* .*)(?:[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$"; this.domainName.setValidators(regexPattern) 此方法不起作用,我可以输入“.com”之类
let regexPattern = "^(?!.* .*)(?:[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$";
this.domainName.setValidators(regexPattern)
此方法不起作用,我可以输入“.com”之类的词,并且状态是有效的,当我在输入上放置相同的正则表达式时,它就起作用了
<input matInput formControlName="domainName" pattern="^(?!.* .*)(?:[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$" placeholder="Domain Name">
谢谢如果使用SetValidator进行验证,则必须返回布尔类型的自定义验证值。 这里不返回任何数据。代码应该是
this.formGroup.controls["firstName"].setValidators([Validators.required, this.checkDomain]);
checkDomain(control) {
console.log("string == ");
console.log(control.value);
let test = control.value;
var pattern = new RegExp(/^(?!.* .*)(?:[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/)
if(test.match(pattern)){
return true;
}
else{
return false;
}
}
和您的html it wokrs中的模式属性。您可以从下面的链接进行探索
我的英语不太好。因此,避免任何误解。您的正则表达式不匹配空格,
(?!...*)
是多余的。它不应该是.setValidators([Validators.pattern(/^(?[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/))/code>?@wiktorstriew如果我将该模式添加到一个变量中,然后添加它,它无法正确验证。您如何进行验证<代码>让regexpatern=/^(?[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\]+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/;this.domainName.setValidators([Validators.pattern(regexpatern)])
必须工作。@WiktorStribiżew与此完全相同