javascript---数字的正则判断(保留两位小数)

数字的正则判断(保留两位小数)

昨天晚上加班加到了今天早上凌晨两点半,脑子都有点迷糊了,昨天晚上有一个需求,就是在文本框里面输入金额钱数,需求是小数点前面可以输入四位数字,之后小数点后面是两位数字。之前我同事在input里面的一个onkeyup方法,进行的判断,她是直接利用了正则表达式,之后利用match方法进行的判断。如下面代码所示。但是有一个问题就是,在电脑上chrome没有问题,在火狐浏览器出现了问题,就是火狐浏览器没法在type=number的时候,输入小数点,同时在手机端的微信浏览器,以及uc浏览器,都是出现点击小数点后,光标到了小数点前面,这个我同事以为是兼容性的问题,但是我觉得是正则的问题,所以我果断,弃用她的正则表达式。

<input id="carCost" type="number" class="qtext money_input"  placeholder="" maxlength="10"
 onkeyup="this.value=this.value.toString().match(/^\d{0,4}(?:\.\d{0,2})?/)">

下面是我写的html和方法,主要是使用了type=text,这样的话,会出现,可以输入汉字以及字母的情况,在这里都已经进行避免了,同时,经过层层判断,利用input本身建立一个属性,oldValue,进行了一个处理原先的数据还原工作,还有一个难点就是,因为inputtext,所以在获取到的value都是String的,在这里需要进行转换成number类型的,尤其是1.2300000,这种精度的数字,所以进行了判断。

<input id="carVIP" type="text" step="any" class="qtext money_input"  placeholder="" maxlength="10" onkeyup="keyup(this)">
   function keyup(v) {
        var a=/(^[1-9]\d{0,3}$)|(^\.\d{1,2}$)|(^[1-9]\d{0,3}\.\d{1,2}$)/
        var value = v.value*1;
        if(value){
            if(!v.oldValue){
                v.oldValue = value;
            }
            if(!a.test(value)){
                v.value = v.oldValue;
            }else {
                //判断让他的结尾不是0
                if(v.value.split(".")[1]){
                    var list = v.value.split(".")[1].split("");
                    if(list.length>2){
                        v.value = v.oldValue
                    }else if(list[1]&&list[1]==0){
                        v.value = v.oldValue
                    }
                }
                //判断让他的开头不是0
                if(v.value.split(".")[0]){
                    var list = v.value.split(".")[0].split("");
                    if(list.length>4){
                        v.value = v.oldValue
                    }else if(list[0]&&list[0]==0){
                        v.value = v.oldValue
                    }
                }
                v.oldValue = v.value ;
            }
        }else{
            if(isNaN(value)){
                if(v.oldValue){
                    v.value = v.oldValue;
                }else{
                    v.value = "";
                }

            }else{
                //可以输入0.2
                if(value!=0){
                    v.value = "";
                }
            }

        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值