我正在一个角项目上工作,我试图确保输入字段只接受1到28之间的正整数,但是我尝试过的正则表达式在输入字母时没有将表单字段标记为无效。
下面是我的代码:setDateRegex = /^[0-9]*$/;
. . .
scheduleSetDaysBefore: [null, [Validators.max(28), Validators.min(1), Validators.pattern(this.setDateRegex)]],
我还尝试了以下正则表达式,但它们都不能工作。
/^[0-9]+$/
/^[0-9]+(.?[0-9]+)?$/
还有一些我不记得了。
编辑
我只是想补充一点,我已经通过使用Valdidator.pattern()
来检查电子邮件是否以可接受的格式输入,以及各种长度验证器实现了类似的功能。
你可以使用自定义验证器,像这样
// i have multiple custom validators so I am using them in a separate file.
export class CustomValidators {
static isNumbers(control: AbstractControl) {
if (!(control.value)) {
return null;
}
return String(control.value)
.match(/^[0-9.]+$/) ? null : {'isNumbers': true};
}
}
在你的formBuilder中,包括这个
scheduleSetDaysBefore: [null, [Validators.max(28), Validators.min(1), CustomValidators.isNumbers]],
在你的HTML中,你可以检查这个错误,apply invalid class on control maybe或者show message
<span class="error-message" *ngIf="form.get('scheduleSetDaysBefore').getError('isNumbers')">Please enter numbers only.</span>
下面的验证器只支持数字。试试这个,可能有用:^[0-9]*$