Jquery与form表单 财务金额输入框
将文本框设置成带有千位分隔符的财务专用数字输入框 - 零..._博客园
var toThousands = function (num) { var num = (num || '').toString(), re = /(\d{3}|\d{3}\.\d{0,2})$/, result = ''; while (re.test(num)) { result = RegExp.lastMatch + result; if (num !== RegExp.lastMatch) { result = ',' + result; num = RegExp.leftContext; } else { num = ''; break; } } if (num) { result = num + result; } return result; }; var toNormalNum = function (numStr) { return numStr.replace(/\,/g, ''); }; /* * @param {HTMLInputElement/HTMLTextAreaElement} elem * @param {Number} index */ var setCursorPosition= function (elem, index) { var val = elem.value; var len = val.length; // 超过文本长度直接返回 if (len < index) return; (function () { elem.focus(); if (elem.setSelectionRange) { // 标准浏览器 elem.setSelectionRange(index, index) } else { // IE9- var range = elem.createTextRange() range.moveStart("character", -len) range.moveEnd("character", -len) range.moveStart("character", index) range.moveEnd("character", 0) range.select() } })(); }; $.fn.getCursorPosition = function () { var el = $(this).get(0); var pos = 0; if ('selectionStart' in el) { pos = el.selectionStart; } else if ('selection' in document) { el.focus(); var Sel = document.selection.createRange(); var SelLength = document.selection.createRange().text.length; Sel.moveStart('character', -el.value.length); pos = Sel.text.length - SelLength; } return pos; }; /* * @param {Reg} reg 用来限制输入字符的格式,如位数,长度,取值范围等 */ $.fn.TextBoxThousandNumInput = function (reg) { var obj = $(this); var oldvalue = obj.val(); var cursorPos = ""; obj.keyup(function () { var newvalue = obj.val(); cursorPos = obj.getCursorPosition(); if (newvalue == "") return obj; newvalue = toNormalNum(newvalue); if (!newvalue.match(reg)) { obj.val(toThousands(oldvalue)); } else { obj.val(toThousands(newvalue)); } var offset=toThousands(newvalue).length-toThousands(oldvalue).length; if ( offset < -1) { setCursorPosition(this, cursorPos-1); } else if (offset > 0) { setCursorPosition(this, cursorPos+offset - 1); } else { setCursorPosition(this, cursorPos); } oldvalue =toNormalNum( obj.val()); }); return obj; }; //个人写正则有问题不输入小数点可以输7位数
var reg = /^((0|[1-9]\d{0,3})(?:.\d{0,2})?)$/; $('#preferential').TextBoxThousandNumInput (reg); $('#totalPrice').TextBoxThousandNumInput (reg);