^\-?[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>
<script language="javascript">2
<!--3
4
function formatString(el)5
{ 6
var obj; 7
if(arguments.length==0) 8
obj = event.srcElement;9
else10
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
else24
{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
else56
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
else69
obj.value = str+".00";70
}71
}72
73
//-->74
</script>

浙公网安备 33010602011771号