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