自己研究了下,感觉这样写是不是可以?替换用户输入什么的,鬼知道用户会输入什么奇葩的字符串啊...我也是菜鸟,写的不好,互相学习...XD
$(document).on('keypress', '#id', function (e) {
// 在 keypress 事件中拦截错误输入
var sCharCode = String.fromCharCode(e.charCode);
var sValue = this.value;
if (/[^0-9.]/g.test(sCharCode) || __getRegex(sCharCode).test(sValue)) {
return false;
}
/**
* 根据用户输入的字符获取相关的正则表达式
* @param {string} sCharCode 用户输入的字符,如 'a','1','.' 等等
* @return {regexp} patt 正则表达式
*/
function __getRegex (sCharCode) {
var patt;
if (/[0]/g.test(sCharCode)) {
// 判断是否为空
patt = /^$/g;
} else if (/[.]/g.test(sCharCode)) {
// 判断是否已经包含 . 字符或者为空
patt = /((\.)|(^$))/g;
} else if (/[1-9]/g.test(sCharCode)) {
// 判断是否已经到达小数点后两位
patt = /\.\d{2}$/g;
}
return patt;
}
}).on('keyup paste', '#id', function () {
// 在 keyup paste 事件中进行完整字符串检测
var patt = /^((?!0)\d+(\.\d{1,2})?)$/g;
if (!patt.test(this.value)) {
// 错误提示相关代码,边框变红、气泡提示什么的
console.log('输入格式不正确!');
}
});
========================= 分割线 =========================
^((?!0)\d+(.\d{1,2})?)$
^ 表示开头
(?!0) 不能以 0 开头
\d+ 整数部分
(\.\d{1,2})? 小数部分,其中 (\.\d{1,2}) 表示小数点后两位,? 表示匹配零次或一次
$ 表示结尾
测试
一般都是输入错误了就弹出错误提示或者编辑框变红吧,直接修改用户的输入真的好么?