angular - 当用户输入完整的数字时如何显示错误
问题描述
我有一个角度/材料形式,我有一个输入类型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这样的完整数字时,内容被删除,并且永远不会触发错误。
我怎样才能实现它?
解决方案
据我了解,验证是这样工作的:
- 1 2 3 => 无效
- 123 => 有效
正如 Robin Dijkhof 所提到的, 1 2 3 不是一个数字,而是一个字符串——这就是你<input type="number"/>
不允许它的原因。
我个人想知道的是为什么您要允许 1 2 3,然后显示无效的表单错误?最后,这就是拥有 html 标准的意义所在,type="number"
因为这样浏览器可以从您那里获得验证工作。
如果我没有正确理解用例,并且您必须以这种方式实现它,那么我可以想到一种方法:
- 将您的输入更改为
type="text"
- 编写自定义验证器:
- fullWidthNumber 用于字符串化数字
- 字符串化数字的最小长度
- 字符串化数字的最大长度
推荐阅读
- arrays - 有没有办法从 2 个也有不同大小的不同数组中制作对?
- java - 使用 GoogleAdsClient 的 Service Account 来制作 AdWordsSession
- browser - 使用 gatsby 开发时是否可以设置特定的浏览器?
- visual-studio-code - NPM 脚本未显示在资源管理器侧边栏中。如何再次向他们展示?
- macos - ping 正常但 curl 不起作用时无法在 macOS 上连接到 Internet
- linux - Debian:蓝牙扫描未显示任何结果
- android - 安装 HAXM 时收到一些警告消息,并且“silent_install.bat”无法识别错误............请帮助某人
- laravel - Laravel-Vuex:更新到数据库中未显示的记录
- reactjs - 将参数传递给 REACT Expo 中的类组件
- python - 根据另一个 2D 图切割 3D 图