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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架