Angular 2 限制输入字段
Angular 2 restrict input field
我想知道是否可以将输入字段限制为某种格式,例如您想要多少位数字然后是“.”然后是2位数?这基本上是价格的输入...而且我不想要像 pattern 属性这样的简单验证。我希望用户无法进行错误输入。
您可以使用 HTML5 功能,正则表达式输入
使用正则表达式模式验证:
<input type="text" name="weight" value="" pattern="^[1-9]\d{0,*}\.\d{2}$" />
你也可以使用这个库,用键修饰你的输入:
<input type="text" pattern="[0-9]+" ng-pattern-restrict />
回购:github.com/AlphaGit/ng-pattern-restrict
你需要使用指令。在指令中添加一个关于输入的 hotListener 并检查是否与指示的 regExpr 匹配。
我前段时间做了一个指令面具。 the stackblitz 中的指令,以及提供代码的广告 "as is",没有任何形式的保证。
@Directive({
selector: '[mask]'
})
export class MaskDirective {
@Input()
set mask(value) {
this.regExpr = new RegExp(value);
}
private _oldvalue: string = "";
private regExpr: any;
private control: NgControl;
constructor(injector: Injector) {
//this make sure that not error if not applied to a NgControl
try {
this.control = injector.get(NgControl)
}
catch (e) {
}
}
@HostListener('input', ['$event'])
change($event) {
let item = $event.target
let value = item.value;
let pos = item.selectionStart; //get the position of the cursor
let matchvalue = value;
let noMatch: boolean = (value && !(this.regExpr.test(matchvalue)));
if (noMatch) {
item.selectionStart = item.selectionEnd = pos - 1;
if (item.value.length < this._oldvalue.length && pos == 0)
pos = 2;
if (this.control)
this.control.control.setValue(this._oldvalue, { emit: false });
item.value = this._oldvalue;
item.selectionStart = item.selectionEnd = pos - 1; //recover the position
}
else
this._oldvalue = value;
}
}
当你在字符串中(或 html 中写 "mask" 时要小心。例如对于数字宽度两位小数是:
[mask]="'^[+-]?([1-9]\d*|0)?(\.\d\{0,2\})?$'"
(\必须写成\\, {写成\{, }写成\} ...)
我想知道是否可以将输入字段限制为某种格式,例如您想要多少位数字然后是“.”然后是2位数?这基本上是价格的输入...而且我不想要像 pattern 属性这样的简单验证。我希望用户无法进行错误输入。
您可以使用 HTML5 功能,正则表达式输入
使用正则表达式模式验证:
<input type="text" name="weight" value="" pattern="^[1-9]\d{0,*}\.\d{2}$" />
你也可以使用这个库,用键修饰你的输入:
<input type="text" pattern="[0-9]+" ng-pattern-restrict />
回购:github.com/AlphaGit/ng-pattern-restrict
你需要使用指令。在指令中添加一个关于输入的 hotListener 并检查是否与指示的 regExpr 匹配。 我前段时间做了一个指令面具。 the stackblitz 中的指令,以及提供代码的广告 "as is",没有任何形式的保证。
@Directive({
selector: '[mask]'
})
export class MaskDirective {
@Input()
set mask(value) {
this.regExpr = new RegExp(value);
}
private _oldvalue: string = "";
private regExpr: any;
private control: NgControl;
constructor(injector: Injector) {
//this make sure that not error if not applied to a NgControl
try {
this.control = injector.get(NgControl)
}
catch (e) {
}
}
@HostListener('input', ['$event'])
change($event) {
let item = $event.target
let value = item.value;
let pos = item.selectionStart; //get the position of the cursor
let matchvalue = value;
let noMatch: boolean = (value && !(this.regExpr.test(matchvalue)));
if (noMatch) {
item.selectionStart = item.selectionEnd = pos - 1;
if (item.value.length < this._oldvalue.length && pos == 0)
pos = 2;
if (this.control)
this.control.control.setValue(this._oldvalue, { emit: false });
item.value = this._oldvalue;
item.selectionStart = item.selectionEnd = pos - 1; //recover the position
}
else
this._oldvalue = value;
}
}
当你在字符串中(或 html 中写 "mask" 时要小心。例如对于数字宽度两位小数是:
[mask]="'^[+-]?([1-9]\d*|0)?(\.\d\{0,2\})?$'"
(\必须写成\\, {写成\{, }写成\} ...)