我这里也input输入举例,首先在页面添加一个input输入框,给这个输入框添加按键松开(ng-keyup)和控件失去光标(ng-blue)事件,传入参数$event,其次添加一个方法,具体操作看代码
htm代码
<input ng-model="model.test" class="table_input" ng-keyup="priceInput($event)" ng-blur="priceInput($event)"
添加一个验证的方法
//当前控件保留两位小数,并且只能输入数字
$scope.priceInput = function (that) {
//获取当前控件对象 that指 $event
//console.log(that.target,$(that.target).val());
//获取到当前控件对象
var current = $(that.target);
// 清除数字和点以外的字符
current.val(current.val().replace(/[^\d.]/g, ""));
// 验证第一个字符是否是数字,也就是是第一个字符不能是点
current.val(current.val().replace(/^\./g, ""));
// 只保留第一个点, 清除多余的点
current.val(current.val().replace(/\.{2,}/g, "."));
current.val(current.val().replace(".", "$#$").replace(/\./g, "").replace("$#$", "."));
// 只能输入两个小数
current.val(current.val().replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'));
// 此处控制的是如果没有小数点,首位不能为0,类似于01、02的金额
if (current.val().indexOf(".") < 0 && current.val() != "") {
if (current.val().substr(0, 1) == '0' && current.val().length == 2) {
current.val(parseFloat(current.val()));
}
} else { // 此处控制的是如果有小数点,整数如果大于等于两位,第一位不能为0,类似于01.16、02.77的金额
let val = current.val(),
beforePoint = val.split('.')[0],
afterPoint = val.split('.')[1];
if (beforePoint.length >= 2 && beforePoint[0] == 0) {
current.val(`${beforePoint.substring(1)}.${afterPoint}`)
}
}
}