<script> //将字符串换成便于观察的格式:srcStr: 要转化的字符串 divNum:分隔位数, dotNum:小数位数 function formatNum(srcStr,divNum,dotNum) { srcStr = ""+srcStr+""; strLen = srcStr.length; var resultStr=""; //判断是否为数字 if(isNumber(srcStr) != true){ alert("输入的内容必需是有效的数字!"); return srcStr; } //长度为空不处理 if(strLen == 0 || (parseFloat(srcStr) == 0)){ resultStr ="0."; for (i=0;i<dotNum;i++){ resultStr = resultStr+"0"; } return resultStr; } dotPos = srcStr.indexOf(".",0); if (dotPos == -1){ //处理整数的情况 resultStr = divIntNum(srcStr, divNum); resultStr = resultStr + "."; for (i=0;i<dotNum;i++){ resultStr = resultStr+"0"; } return resultStr; }else{ //处理小数的情况 strBfDot = srcStr.substr(0, dotPos); strAftDot = srcStr.substr(dotPos + 1, srcStr.length); resultStr = parseFloat(strBfDot)+parseFloat(divDecimalNum(strAftDot, dotNum))/100; resultStr = resultStr + ""; dotPos = resultStr.indexOf("."); if (dotPos == -1) { resultStr = divIntNum(resultStr, divNum) + ".00"; } else { strBfDot = resultStr.substr(0, dotPos); strAftDot = resultStr.substr(dotPos, resultStr.length); while (strAftDot.length < 3) { strAftDot+="0"; } resultStr = "" + divIntNum(strBfDot, divNum) + strAftDot; } return resultStr; } } //对于格式化后的数据进行还原 function formatNum2(srcStr){ var obj = event.srcElement; var txt =obj.createTextRange(); txt.moveStart('character',obj.length); txt.collapse(true); txt.select(); return srcStr.replaceAll(",",""); } //整数部分处理 function divIntNum(srcStr, divNum){ var len=srcStr.length; var result =""; if(len == 0){ return 0; }else{ while(len>divNum) { result = "," + srcStr.substr(len-divNum) + result; srcStr = srcStr.substr(0, len-divNum); len=len-divNum; } result = srcStr + result; } return result; } //小数部分处理 function divDecimalNum(strAftDot, dotNum){ resultStr =""; if(strAftDot.length > dotNum){ nTen =1; for(j=0;j<dotNum;j++){ nTen = nTen*10; } resultStr = resultStr + Math.round(parseFloat("0." + strAftDot)*nTen); while(resultStr.length<dotNum){ resultStr ="0" + resultStr; } }else{ resultStr = strAftDot; for (i=0;i<dotNum - strAftDot.length;i++){ resultStr = resultStr +"0"; } } return resultStr; } //判断是否为数字 function isNumber(srcStr){ var re =/^(([1-9]\d*)|0)[\.]?\d*$/; return re.test(srcStr); } String.prototype.replaceAll = function(s1,s2){ return this.replace(new RegExp(s1,"gm"),s2); } function chkPrice(obj) { if (obj.value == '') { return; } if (!isNumber(obj.value.replaceAll(",",""))) { if(ckgHF(obj)) { alert("温馨提示:输入的金额格式不正确!"); } else { alert("温馨提示: 请输入有效的金额!"); } obj.value = ""; obj.focus(); } else { if(ckgHF(obj)) { alert("温馨提示:输入的金额格式不正确!"); obj.value = ""; obj.focus(); } else { obj.value=formatNum(obj.value.replaceAll(",",""),3,2); } } } function ckgHF(obj) { try { var inp = obj.value; if (inp != '') { if (inp.substring(0,1) == ",") { return true; } if (inp.indexOf(".") != -1) { inp = inp.substring(0,inp.indexOf(".")); } inp=inp.split("").reverse().join(""); var ind = -1; while((ind=inp.indexOf(",")) != -1) { if (ind<3 || (ind+1)%4 != 0) { return true; } else { inp = inp.replace(",", "R"); } } } return false; } catch (e) { return true; } } function bchkPrice(obj) { if (obj.value == '') { return; } obj.value=formatNum2(obj.value); } //对于格式化后的数据进行还原 function formatNum2(srcStr){ var obj = event.srcElement; var txt =obj.createTextRange(); txt.moveStart('character',obj.length); txt.collapse(true); txt.select(); return srcStr.replaceAll(",",""); } </script> <input type="text" onblur="chkPrice(this)" onfocus="bchkPrice(this)"/>
详细解决方案
小数点金额证验
热度:356 发布时间:2012-08-27 21:21:57.0
相关解决方案