当前位置: 代码迷 >> Web前端 >> 小数点金额证验
  详细解决方案

小数点金额证验

热度:356   发布时间:2012-08-27 21:21:57.0
小数点金额验证
<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)"/>
  相关解决方案