我想在验证自定义正则表达式后停止输入任何数字,问题是条件为真,但event.preventDefault不会阻止输入,正则表达式是以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();
}
}
即使条件为真,用户仍然可以输入任何值 输入高于100的任何值仍然有效,并且事件不会阻止值
<input type='text' (keydown)="preventPercentage($event)" [(ngModel)]="value">
我使用了按键,但是它允许输入123,即三位数 然后我就不能使用退格键删除该号码了,我到底在做什么错,有人可以建议任何帮助将得到帮助
答案 0 :(得分:0)
尝试一下。我认为您需要根据正则表达式进行更改。
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">
答案 1 :(得分:0)
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();
}
}