码迷,mamicode.com
首页 > 其他好文 > 详细

对Textbox的值转换为带千位符和小数的Decimal字符串

时间:2014-05-24 05:30:56      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   c   code   tar   

以下Function可以用于textbox的KeyUp事件:

bubuko.com,布布扣
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;
                //用于判断千位符的数量变化
                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[start]) >= 0) {
                            break;
                        }
                        nstr = nstr.concat(temp[start]);
                    }
                    //小数符号(.号)的位置
                    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[start + i]);
                    }
                    if (k1 > 0 && k2 > 0) {
                        nstr = nstr.concat(pp);
                    }
                    for (var i = k2 + start; i < end; i++) {
                        nstr = nstr.concat(temp[i]);
                        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[i]);
                    }
                } else {
                    nstr = str;
                }
                //去除不合法符号(包括手动输入的,号)
                if (!reg.test(nstr)) {
                    if (nstr.match(/[^0-9,\.-]/g) != null) {
                        if (nstr.match(/[^0-9,\.-]/g).length > 0) {
                            nstr = nstr.replace(/[^0-9,\.-]/g, ‘‘);
                            $(item).val(nstr);
                        }
                    }
                }
                $(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;
                    }
                }
                return true;
            }
        }
    }
    return false;
}
View Code

 

 

对Textbox的值转换为带千位符和小数的Decimal字符串,布布扣,bubuko.com

对Textbox的值转换为带千位符和小数的Decimal字符串

标签:style   class   blog   c   code   tar   

原文地址:http://www.cnblogs.com/xachary/p/3736507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!