JS如何限制文本框只能输入小写的金额,且首位不能输0,小数点后只能输入2位

其实要实现这种,有两种方法。

一种是在用户输入完成后对数据进行验证,另一种用户实时录入时,对实时录入的值进行强制更改。

那么我把这两种各写了一个函数,你了解一下看看,里面有说明,当然,两个你也可以同时使用,效果极佳:

1
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
<!doctype html>
<html>
<head>
<meta charset= "utf-8" >
<title>价格录入限定</title>
<script type= "text/javascript" >
 
/**
* 实时动态强制更改用户录入
* arg1 inputObject
**/
function  amount(th){
     var  regStrs = [
         [ '^0(\\d+)$' '$1' ],  //禁止录入整数部分两位以上,但首位为0
         [ '[^\\d\\.]+$' '' ],  //禁止录入任何非数字和点
         [ '\\.(\\d?)\\.+' '.$1' ],  //禁止录入两个以上的点
         [ '^(\\d+\\.\\d{2}).+' '$1' //禁止录入小数点后两位以上
     ];
     for (i=0; i<regStrs.length; i++){
         var  reg =  new  RegExp(regStrs[i][0]);
         th.value = th.value.replace(reg, regStrs[i][1]);
     }
}
 
/**
* 录入完成后,输入模式失去焦点后对录入进行判断并强制更改,并对小数点进行0补全
* arg1 inputObject
* 这个函数写得很傻,是我很早以前写的了,没有进行优化,但功能十分齐全,你尝试着使用
* 其实有一种可以更快速的JavaScript内置函数可以提取杂乱数据中的数字:
* parseFloat('10');
**/
function  overFormat(th){
     var  v = th.value;
     if (v ===  '' ){
         v =  '0.00' ;
     } else  if (v ===  '0' ){
         v =  '0.00' ;
     } else  if (v ===  '0.' ){
         v =  '0.00' ;
     } else  if (/^0+\d+\.?\d*.*$/.test(v)){
         v = v.replace(/^0+(\d+\.?\d*).*$/,  '$1' );
         v = inp.getRightPriceFormat(v).val;
     } else  if (/^0\.\d$/.test(v)){
         v = v +  '0' ;
     } else  if (!/^\d+\.\d{2}$/.test(v)){
         if (/^\d+\.\d{2}.+/.test(v)){
             v = v.replace(/^(\d+\.\d{2}).*$/,  '$1' );
         } else  if (/^\d+$/.test(v)){
             v = v +  '.00' ;
         } else  if (/^\d+\.$/.test(v)){
             v = v +  '00' ;
         } else  if (/^\d+\.\d$/.test(v)){
             v = v +  '0' ;
         } else  if (/^[^\d]+\d+\.?\d*$/.test(v)){
             v = v.replace(/^[^\d]+(\d+\.?\d*)$/,  '$1' );
         } else  if (/\d+/.test(v)){
             v = v.replace(/^[^\d]*(\d+\.?\d*).*$/,  '$1' );
             ty =  false ;
         } else  if (/^0+\d+\.?\d*$/.test(v)){
             v = v.replace(/^0+(\d+\.?\d*)$/,  '$1' );
             ty =  false ;
         } else {
             v =  '0.00' ;
         }
     }
     th.value = v; 
}
</script>
</head>
<body>
<input type= "text"  name= "city"  value= ""  onKeyUp= "amount(this)"  onBlur= "overFormat(this)"  />
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_38188485/article/details/80902821