Bestcomy.net blog

Coding for funny

导航

我写的正则表达式,欢迎大家来指正

Posted on 2005-07-25 23:52  bestcomy  阅读(4423)  评论(6编辑  收藏  举报

^\-?[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>