我想在验证自定义正则表达式后停止输入任何数字,问题是条件为true,但event.preventDefault不阻止输入,reg ex是用小数输入1-100之间的百分比值
/^(100(.0{1,2})?|[1-9]?d(.d{1,2})?)$/
这是我的输入
<input type='text' (keyup)="preventPercentage($event)" [(ngModel)]="value">
ts
preventPercentage(event){
var p = event.target.value
var s= p.match(/^(100(.0{1,2})?|[1-9]?d(.d{1,2})?)$/) != null
if(!s && p){
event.preventDefault();
}
}
即使条件为true,用户仍然可以输入任何值输入高于100的任何值,它仍然有效,并且事件不会阻止值
<input type='text' (keydown)="preventPercentage($event)" [(ngModel)]="value">
我使用了向下键,但它允许输入123,即三位数然后我不能用退格删除那个数字我到底做错了什么有人能建议一个sol吗任何帮助都将不胜感激
试试这个。我认为正则表达式中需要根据您的要求进行更改。
preventPercentage(event){
var p = event.target.value + event.key;
var s = p.match(/^(100(.0{1,2})?|[1-9]?d(.d{1,2})?)$/) != null;
if (!s && event.keyCode !== 8) {
event.stopPropagation();
return false;
}
}
使用此键向下键:
<input type='text' (keydown)="preventPercentage($event)" [(ngModel)]="value">
preventPercentage(event: any) {
function stopProgram() {
event.stopPropagation();
return false;
}
if (event.keyCode === 8) {
return true;
}
var p = event.target.value;
if ((event.keyCode === 190 && p.indexOf('.') > -1) || p === '100') {
return stopProgram();
}
p = p + event.key;
var s = p.match(/^(100(.0{1,2})?|[1-9]?d(.d{1,2})?)$/) != null;
if (!s && event.keyCode !== 190) {
return stopProgram();
}
}
这是因为必须使用keydown
事件,而不是keyup
。
它认为键盘操作已经完成,您不能取消它。