【发布时间】:2020-10-25 08:29:33
【问题描述】:
我有一个角度/材料形式,我有一个输入类型number。
由于我在亚洲,用户可以输入全角数字,但我想显示“仅半角”的错误。
我做了以下
组件
const CustomValidator = {
fullWidthNumber(control: AbstractControl): ValidationErrors | null {
console.log(control.value);
return control.value.toString().match(/[\uff00-\uff9f]/) ? { fullWidth: true } : null;
},
};
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
title = 'MyShopApp';
public altitudeControl: FormControl;
constructor() { }
ngOnInit() {
this.altitudeControl = new FormControl(2, [
Validators.required,
Validators.min(5),
Validators.max(10),
CustomValidator.fullWidthNumber,
]);
}
}
模板
<form (ngSubmit)="altitudeControl.valid && setHeight(altitudeControl.value)">
<mat-form-field class="full-width">
<mat-label>{{ "ALTITUDE" }}</mat-label>
<input matInput [formControl]="altitudeControl" name="altitude" type="number" />
<mat-error *ngIf="altitudeControl.hasError('max')">
ERROR.FIELD.MAX
</mat-error>
<mat-error *ngIf="altitudeControl.hasError('min')">
ERROR.FIELD.MIN
</mat-error>
<mat-error *ngIf="altitudeControl.hasError('fullWidth')"> ERROR.FIELD.FULL_WIDTH </mat-error>
<mat-error *ngIf="altitudeControl.hasError('required')">
ERROR.FIELD.REQUIRED
</mat-error>
</mat-form-field>
</form>
问题是,当我添加一个像123这样的完整数字时,内容被删除,并且永远不会触发错误。
我怎样才能实现它?
【问题讨论】:
-
您可能想要添加一些您希望有效/无效的半角和全角示例。我们中有些人对此并不熟悉。
-
123 => 无效 123 => 有效
-
在你的 Stackblitz 中没有机会输入 1 2 3,因为它不是数字。
-
这是我的问题,我该怎么办?
-
inputType="number" 显然只接受数字。 “1 2 3”不是数字。我认为您应该删除 inputtype 并编写自己的允许“1 2 3”的验证器
标签: angular validation angular-material