对Textbox的值转换为带千位符和小数的Decimal字符串
2014-05-19 11:38
169 查看
以下Function可以用于textbox的KeyUp事件:
2014-06-06 发现旧版IE不支持selectionStart还有字符串的"[]"索引获取值, 已经修复这个bug.
2014-06-10 修复上一次修复遗留的IE的bug.
View Code
2014-06-06 发现旧版IE不支持selectionStart还有字符串的"[]"索引获取值, 已经修复这个bug.
2014-06-10 修复上一次修复遗留的IE的bug.
/* Validate the textbox value is decimal. */ var numberChars = "1234567890"; function isDecimal(item) { var obj = $(item); if (obj.length > 0) { if ($(obj).val() != null && typeof ($(obj).val()) != 'undefined') { var str = $(obj).val().toString(); if (str != "") { //记录初始光标位置 var selectionStart = item.selectionStart; //兼容IE if (typeof (item.createTextRange) != "undefined") { item.focus(); var r = document.selection.createRange(), tr = item.createTextRange(); tr.setEndPoint('endtoend', r); item.selectionStart = tr.text.length - r.text.length; item.selectionEnd = tr.text.length; selectionStart = item.selectionStart; } //用于判断千位符的数量变化 var pren = str.split(',').length - 1; //合法Decimal格式字符串, 可以含千位符(,号) var pattern = '^-?0(\\.\\d+)?$|^-?[1-9]\\d*(\\.\\d+)?$|^-?([1-9][0-9]{0,2},)(\\d{3},)*(\\d{3})(\\.\\d+)?$'; //合法字符集, 不包括,号 var pattern2 = '^[0-9\.-]*$'; var reg = new RegExp(pattern, 'g'); var reg2 = new RegExp(pattern2, 'g'); //转换之前, 去除,号 var temp = str.replace(/,/, ""); while (temp.indexOf(',') >= 0) { temp = temp.replace(/,/, ""); } var nstr = ''; if (reg2.test(temp)) { //除(/)数和模(%)数 var k1 = 0, k2 = 0; //转换开始和结束位置 var start = 0, end = 0; //千位符(,号) var pp = ','; //计数(3的倍数) var p = 0; //判断前置的非数字符号(这里是-号) for (; start < temp.length; start++) { if (numberChars.indexOf(temp.substring(start, start + 1)) >= 0) { break; } nstr = nstr.concat(temp.substring(start, start + 1)); } //小数符号(.号)的位置 var pIndex = temp.indexOf('.'); //存在小数符(.号), 即以它的位置为结束位置, 否则以字符串结尾为结束位置 if (pIndex >= 0) { end = pIndex; } else { end = temp.length; } k2 = (end - start) % 3; k1 = parseInt((end - start) / 3); for (var i = 0; i < k2; i++) { nstr = nstr.concat(temp.substring(start + i, start + i + 1)); } if (k1 > 0 && k2 > 0) { nstr = nstr.concat(pp); } for (var i = k2 + start; i < end; i++) { nstr = nstr.concat(temp.substring(i, i + 1)); p++; if (p == 3 && i + 1 != end) { p = 0; nstr = nstr.concat(pp); } } for (var i = end; i < temp.length; i++) { nstr = nstr.concat(temp.substring(i, i + 1)); } } else { nstr = str; } if (!reg.test(nstr)) { //去除不合法符号(包括手动输入的,号) if (nstr.match(/[^0-9,\.-]/g) != null) { var matchLength = nstr.match(/[^0-9,\.-]/g).length; if (matchLength > 0) { var tempLength = nstr.length; nstr = nstr.replace(/[^0-9,\.-]/g, ''); $(item).val(nstr); selectionStart = selectionStart - tempLength + nstr.length; } } } $(item).val(nstr); if (str != nstr) { var tpren = nstr.split(',').length - 1; if (pren != tpren) { //根据千位符的数量变化, 控制光标位置 item.selectionStart = selectionStart + tpren - pren; item.selectionEnd = selectionStart + tpren - pren; } else { item.selectionStart = selectionStart; item.selectionEnd = selectionStart; } } //兼容IE if (typeof (item.createTextRange) != "undefined") { var range = item.createTextRange(); range.collapse(true); range.moveEnd('character', item.selectionEnd); range.moveStart('character', item.selectionStart); range.select(); } return true; } } } return false; }
View Code
相关文章推荐
- 对double小数四舍五入并转换成字符串
- 将Decimal转换成字符串
- 数字转换成字符串时保留小数位数
- 转换科学计数法的数值字符串为decimal类型
- Python3基础 str str()将整数,小数转换成字符串。 输入一个小数,显示整数部分与小数部分
- 【深度历险】:VC 关于定点数 VT_DECIMAL 转换为字符串CString的函数探秘!
- JS转换Decimal带千分号的字符串显示
- DB2将DECIMAL转换成字符串
- 字符串unicode与decimal转换
- decimal扩展方法(转换为字符串,去掉末尾的0)
- decimal转换字符串去掉小数点后面多余的0
- 在js中将number类型的数据转换成保留两位小数的字符串
- 小数类型的数字,数值类型转换[DECIMAL,NUMERIC,FLOAT,INT]
- 字符串十进制小数转换成字符串二进制小数
- SQL Server 疑难杂症--转换科学计数法的数值字符串为decimal类型
- js、PHP将分数字符串转换为小数
- 金额字符串转换成Decimal格式的怪问题引发的思考
- 数字转换成字符串时保留小数位数
- 关于字符串和小数的互相转换?
- C#先把数值类型转换为带千分位的字符串,再判断是否带小数,如果带小数,保存两位小数,不带,不保留。