输入框js验证函数
功能
手机浏览器下保证
7 位数值的输入,包括小数点,这个的处理安全的过分了,因为边界情况太多了,无论是手机型号,还有输入法
代码解释
<input type="number" class="amount J-total-amount" autocomplete="off" maxlength="7" />
配合 js 代码使用,就万无一失了,有详细的代码注释,主要是用了一些正则的检验,这里还是有坑的…
//单单监听input不能达到效果,边界的不一定可以搞定
self.inputSelectionSupported = $("input").hasOwnProperty("selectionStart");
//fix firefox 下面的小bug
if (/Firefox\/(\S+)/.test(window.navigator.userAgent)) {
els.forEach(function(value, index, array) {
array[index].type = "text";
});
}
inputs
.on("input", function() {
//input是在输入框改变更新了数值之后才出发
sanitizeInput(this);
})
.on("keypress", function(e) {
//keypress是在输入框改变之前就触发了
//之所以监听keypress是因为keyup,keydown有些情况下获得的key不标准
var code = e.key || e.keyCode;
var key = String.fromCharCode(code);
if (!code) return;
if ([8, 37, 39].indexOf(code) >= 0) return; // backspace, left, right
//这个东西firefox下为true
if (self.inputSelectionSupported) {
// strict test
var endArr = this.value.split("");
endArr.splice(this.selectionStart, this.selectionEnd - this.selectionStart, key);
var endValue = endArr.join("");
var endNumber = parseFloat(endValue);
if (!/^\d*\.?\d{0,2}$/.test(endValue)) {
e.preventDefault();
} else if (isNaN(endNumber) || endNumber < 0) {
e.preventDefault();
}
} else {
// fallback to week test
if (key === ".") {
if (this.value.indexOf(".") >= 0) {
e.preventDefault();
}
} else if (!/^\d$/.test(key)) {
e.preventDefault();
}
}
});
var sanitizeInput = function(input) {
var sanitized = input.value;
if (sanitized.length === 0) {
//iosbug,直接点击文字的话会输入成功,拿不到input.value
//小米bug,上面的“-”也能直接输入成功,拿不到input.value
input.value = "";
return;
}
var modified = false;
// 长度限制
if (sanitized.length > 7) {
sanitized = sanitized.substr(0, 7);
modified = true;
}
// 非法字符处理
// 将非数字,非.的用空字符串替换
var mreg = /[^\d\.]/g;
if (mreg.test(sanitized)) {
sanitized = sanitized.replace(mreg, "");
modified = true;
}
// 多小数点处理
// 这里的正则就是分组捕获了
var preg = /(\d*\.\d*)\.(\d*)/g;
while (preg.test(sanitized)) {
sanitized = sanitized.replace(preg, "$1$2");
modified = true;
}
// 去头部0
var zreg = /^0+(\d+)/;
if (zreg.test(sanitized)) {
sanitized = sanitized.replace(zreg, "$1");
modified = true;
}
// 小数点精度处理
// 这里的正则就是判断是否小数点有三位
var floatEnd = sanitized.match(/\d*\.(\d{3,})/);
if (floatEnd) {
floatEnd = floatEnd[1];
sanitized = sanitized.slice(0, 2 - floatEnd.length);
modified = true;
}
if (modified) {
input.value = sanitized;
}
};
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com
推荐文章
文章标题:输入框js验证函数
文章字数:569
本文作者:泽鹿
发布时间:2019-08-28, 16:45:23
最后更新:2019-08-28, 16:45:23
原始链接:http://panyifei.github.io/2019/08/28/技术/JS代码库/输入框js验证函数/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。