如下函数会逐个元素判断是否非数字,然后进行替换,JS函数如下:
function FormatNumber(obj,precision) {
//将输入参数转换为字符串形式
//var strInput = Math.abs(intInput).toString();
//如果有小数,把小数部分提取出来
//先剔除非字符字母
var strInput = obj.value;
var regExp = /\d/;
if(strInput.length<=0)
{
return "";
}
var strXS = "";
var strZS ="";
var i=0;
var strInputTemp="";
while(i < strInput.length)
{
if(strInput[i] != ',')
strInputTemp += strInput[i];
i++;
}
strInput = strInputTemp;
var j=0;
var k=0;
var strZStemp="";
var strXStemp="";
if (strInput.indexOf(".", 0) != -1) {
strXS = strInput.substring(strInput.split(".")[0].length, strInput.length);
strZS = strInput.split(".")[0];
//替换非数字
while(j < strZS.length)
{
if(regExp.test(strZS[j]))
strZStemp += strZS[j];
j++;
}
while(k < strXS.length)
{
if(regExp.test(strXS[k]))
strXStemp += strXS[k];
k++;
}
strZS = strZStemp;
strXS = "." + strXStemp;
}
else
{
strZS = strInput;
strXS = ".0";
//替换非数字
strZStemp = "";
j=0;
while(j < strZS.length)
{
if(regExp.test(strZS[j]))
strZStemp += strZS[j];
j++;
}
strZS = strZStemp;
}
if(strXS.length > precision+1)
{
strXS = strXS.substr(0, precision+1)
}
//获取输入参数的长度
var iLen = strZS.length;
//如果输入参数的长度小于等于3,则直接返回
//否则,再进行处理
if (iLen > 3) {
//首先取模,以作为起始点,每3位截取一次存入数组,最后再进行拼接返回
var iMod = iLen % 3;
//每3位截取的起始点
var iStart = iMod;
//每3位截取的存储数组
var aryReturn = [];
//循环处理:每3位截取一次 存储到数组
while (iStart + 3 <= iLen) {
aryReturn[aryReturn.length] = strZS.substring(iStart, iStart + 3);
iStart = iStart + 3;
}
//将数组中的数据连接起来
aryReturn = aryReturn.join(",");
//处理输入参数长度不是3的倍数的情况
if (iMod != 0) {
aryReturn = strZS.substring(0, iMod) + "," + aryReturn;
}
strZS = aryReturn;
}
while(strXS.length<precision+1)
{
strXS=strXS+"0";
}
if(precision<=0)
{
return strZS;
}
return strZS + strXS;
}
function vaildFloatNumberPerfect(evnt,obj){
evnt=evnt||window.event;
var keyCode=window.event?evnt.keyCode:evnt.which;
if((obj.value.length==0 || obj.value.indexOf(".")!=-1) && keyCode==46) return false;
return keyCode>=48&&keyCode<=57||keyCode==46||keyCode==8;
}
html元素:
<input name="txtTransportAmount" type="text" value="8" id="txtTransportAmount" onkeypress="return vaildFloatNumberPerfect(event,this) " onpaste="return !clipboardData.getData('text').match(/\D/) " ondragenter="return false " onblur="this.value = FormatNumber(this,2);" style="ime-mode:Disabled" />