如何验证 type="number"
的输入仅在值为数字或空时才有效,只能使用 Reactive Forms(没有指令)?
只允许使用数字 [0-9]
和. ,不允许使用“ e”或任何其他字符。
到目前为止我所做的努力:
<form [formGroup]="form" novalidate>
<input type="number" formControlName="number" id="number">
</form>
export class App {
form: FormGroup = new FormGroup({});
constructor(
private fb: FormBuilder,
) {
this.form = fb.group({
number: ['', [CustomValidator.numeric]]
})
}
}
export class CustomValidator{
// Number only validation
static numeric(control: AbstractControl) {
let val = control.value;
if (val === null || val === '') return null;
if (!val.toString().match(/^[0-9]+(\.?[0-9]+)?$/)) return { 'invalidNumber': true };
return null;
}
}
问题是当一个用户输入的东西不是一个数字 (“123e”或“ abc”)的表单控制的值变成 null
,记住,我不希望字段是必需的,所以如果字段真的是空的 null
值应该是有效的。
跨浏览器支持也很重要(Chrome 的数字输入框不允许用户输入字母——除了“ e”,但 FireFox 和 Safari 可以)。