【发布时间】:2021-09-08 18:18:21
【问题描述】:
您好,我正在尝试对 Angular 中的 IP 地址使用验证器。然而,似乎即使我输入了一个无效的 IP 地址,即12.2.2.2...,GUI 显示它是有效的(见图)。但是,控制台日志显示它是模式不匹配(这意味着它检测到不正确的模式)。我不确定我错过了什么。现在开始感到困惑。需要一双新的眼睛来发现缺陷。
请注意,所需部分已经在使用ipaddress。我只是对它为什么不能进行模式验证感到困惑。看图
见我的stackblitz
这是我的代码
HTML
<div class="form-group row required" [ngClass]="{
'is-invalid': ipaddress.invalid && (ipaddress.dirty || ipaddress.touched),
'is-valid': ipaddress.valid && (ipaddress.dirty || ipaddress.touched)
}">
<label for="ipaddress" class="col-sm-3 col-form-label">IP Address</label>
<div class="col-sm-7">
<input type="text" class="form-control" placeholder="IP Address"
id="ipaddress" name="ipaddress" formControlName="ipaddress"
ngbAutofocus required>
<div class="form-control-feedback invalid-feedback"
*ngIf="ipaddress.errors">
<p *ngIf="ipaddress.errors.required">IP Address is required</p>
<p *ngIf="ipaddress.errors.pattern">Invalid IP Address format</p>
</div>
</div>
</div>
TS 文件
this.ipaddress = new FormControl('', {
validators: Validators.compose([
Validators.required,
Validators.pattern('(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)')
])
});
【问题讨论】:
-
你能创建 stackblitz 吗?
-
我不会创建自己的正则表达式,而是使用使用npmjs.com/package/is-ip的自定义验证器
-
@Chellappanவ 添加了我的堆栈闪电战
-
期望当IP地址无效时,输入字段应该是红色而不是带有复选标记,当前,它在输入字段上显示绿色并带有复选标记
标签: angular typescript angular-reactive-forms angular-forms