Bestcomy.net blog

Coding for funny
随笔 - 118, 文章 - 1, 评论 - 2920, 阅读 - 89万

导航

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

Posted on   bestcomy  阅读(4425)  评论(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>
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示