javascript 格式化字符串函数,将输入123455.9833格式化为 123,455.98

^/-?[1-9]/d{0,2},(/d{3},)*/d{3}(/./d+)?$          //匹配 12,045,345.343  -12,045,345.343带千分位
^/-?[1-9]/d{0,2}(/./d+)?$                                   //匹配 34.454   -34.454 不带千分位
^/-0?(/./d+)$|^/-0(/./d+)?$|^0?(/./d+)?$            //匹配 -0.123 .343         无整数位
^/-?[1-9]/d+(/./d+)?$                                          //匹配 123455.98 -3243545.55  普通double类型

上面分了几种情况,下面将上面几种情况拼起来就是我要的正则表达式

^/-?[1-9]/d{0,2},(/d{3},)*/d{3}(/./d+)?$|^/-?[1-9]/d{0,2}(/./d+)?$|^/-0?(/./d+)$|^/-0(/./d+)?$|^0?(/./d+)?$|^/-?[1-9]/d+(/./d+)?$


现在希望各位熟悉正则表达式的朋友指点,是否能优化一下,感觉实在太长。

以下是javascript 格式化字符串函数,将输入123455.9833格式化为 123,455.98

1     < script language = " javascript " >
 
2          <!--
 
3         
 
4          function  formatString(el)
 
5          {        
 
6            var obj;    
 
7            if(arguments.length==0)                
 
8                obj = event.srcElement;
 
9            else
10                obj = el;
11            val = obj.value;
12            //首先格式化小数为2位
13            var regex = /^-?[1-9]d{0,2},(d{3},)*d{3}(.d+)?$|^-?[1-9]d{0,2}(.d+)?$|^-0?(.d+)$|^-0(.d+)?$|^0?(.d+)?$|^-?[1-9]d+(.d+)?$/;
14            if(val!="" && regex.test(val)==true)
15            {
16                ary = val.split(".");
17                if(ary.length==1)
18                {
19                    if(val == "")
20                        val = "0";
21                    obj.value = val + ".00";
22                }

23                else
24                {
25                    if(ary[1].length<2)
26                        obj.value = val + "0";
27                    else if(ary[1].length>2)
28                        obj.value = ary[0+ "." + ary[1].substring(0,2);
29                }

30            }

31            //对没有逗号分隔符的输入加上逗号分隔符
32            regex = /^-?[1-9]d{3,}(.d+)?$/;
33            if(regex.test(obj.value)==true)
34            {
35                val = obj.value;
36                var zf = parseFloat(val)<0?"-":"";
37                if(zf!="")
38                    val = val.substr(1);
39                ary = val.split(".");
40                var len = ary[0].length;
41                len = (len-len%3)/3 + (len%3>0);
42                var str = "";
43                var m = ary[0];
44                for(var i=len-1; i >= 0; i--)
45                {
46                    var d = Math.pow(1000,i);
47                    var y = m%d;    //余数
48                    var s = (m-y)/d;
49                    if(i<len-1)
50                    {
51                        for(var j=2;j>0; j--)
52                        {
53                            if(s < Math.pow(10,j))                
54                                s = "0" + s;    
55                            else
56                                break;
57                        }

58                    }

59                    if(str!="")
60                        str += ",";
61                    str += s;
62                    m = y;
63                }

64                if(zf!="")
65                    str = "-" + str;
66                if(ary.length>1)
67                    obj.value = str+"."+ary[1];
68                else
69                    obj.value = str+".00";
70            }

71        }

72         
73          // -->
74          </ script >
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值