<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/static/protocol/https/jquery/jquery-1.10.2.min_65682a2.js">
</script>
</head>
<body>
<input type="text" id="usaExchangeRate" name="usaExchangeRate" οninput="validateNumFun(this,false,6,3)"/>
<script type="text/javascript">
/**
* <br>方 法 描 述:根据自定义的标准,校验数字的合法性
* <br>创 建 人:jinzhaoqiang
* <br>创建时间:2018/6/15 9:53
* <br>修改备注:无
*/
function checkNum(value,param,th,split){
// 输入值为空,或者传入参数不完整则不进行校验,整数位不应小于1位,小数位不应小于0位
if(!value || !param || param.length!=3 || param[1]<=0 || param[2]<0)
return true;
// 将分隔符去掉
if (split)
value = value.split(split).join('');
// 判断是否为数字
if(value.match(/^-?\d*\.?\d*$/)){
var isNeg = false;
var intPart = "";
var fracPart = "";
var strval = value + "";
var intPartAfter = "";
var fracPartAfter = "";
// 将数字分为符号位、整数位、小数位三部分
if(strval[0]=="-") {
isNeg = true;
strval = strval.substr(1);
}
if(strval.indexOf('.')!=-1){
intPart = strval.substr(0,strval.indexOf("."));
fracPart = strval.substr(strval.indexOf(".")+1);
}else{
intPart = strval;
}
// 判断是否满足位数(整数位、小数位)限制,符号位限制
if(intPart.length<=param[1] && fracPart.length<=param[2] && (param[0] || !isNeg)){
//以无意义的0开头,去除多余的0
var intPart2 = "";
if (intPart.length>1 && intPart.match(/^0.*$/)) {
intPart2 = intPart.replace(/0+/,'');
if (!intPart2)
intPart2 = "0" + intPart2;
if (intPart != intPart2) {
intPart = intPart2;
}
}
var fr2 = "";
if (isNeg) fr2 = fr2 + "-";
if (intPart) fr2 = fr2 + intPart;
if (param[2]>0){
if (strval.indexOf('.')!=-1)
fr2 = fr2 + ".";
if (fracPart)
fr2 = fr2 + fracPart;
}
if (fr2 != value){
fr2 = addSplit4Num(fr2,split);
$(th).val(fr2);
return false;
}
fr2 = addSplit4Num(fr2,split);
$(th).val(fr2);
return true;
}
// 位数不满足要求,进行规范化
if (intPart.length>1 && intPart.match(/^0.*$/)) {
intPart = intPart.replace(/0+/,'');
if (!intPart)
intPart = "0" + intPart;
}
intPartAfter = intPart.substr(0,param[1]);
fracPartAfter = fracPart.substr(0,param[2]);
var fr = intPartAfter;
if(fracPartAfter)
fr = fr + "." + fracPartAfter;
if(param[0] && isNeg){
fr = "-" + fr;
}
fr = addSplit4Num(fr,split);
$(th).val(fr)
}else{
var fr = "";
var str = "";
var intPart = "";
var fracPart = "";
var isDot = false;
if (value[0]=="-"){
str = value.substr(1);
fr = fr +"-";
}else{
str = value;
}
if (str.indexOf(".")!=-1) {
isDot = true;
intPart = str.substr(0,str.indexOf("."));
fracPart = str.substr(str.indexOf(".")+1);
}else{
intPart = str;
}
// 将非数字字符清空
if (intPart) {
while(!intPart.match(/^\d*$/) && intPart){
intPart = intPart.replace(/[^\d]+/,'');
}
if (intPart)
fr = fr + intPart;
}
if (param[2]>0 && isDot) fr = fr + ".";
if (param[2]>0 && fracPart && (fracPart = fracPart.replace(/\..*/,''))) {
while(!fracPart.match(/^\d*$/) && fracPart){
fracPart = fracPart.replace(/[^\d]+/,'');
}
if (fracPart)
fr = fr + fracPart;
}
fr = addSplit4Num(fr,split);
$(th).val(fr);
}
return false;
}
/**
* <br>方 法 描 述:增加分隔符 如 222,321,1
* <br>参 数 说 明:data:要被格式化的数值,split:分隔符
* <br>创 建 人:jinzhaoqiang
* <br>创建时间:2018/6/15 9:50
* <br>修改备注:无
*/
function addSplit4Num(data,split){
if (!split || !data) return data; //数据为空,或分隔符为空,直接返回
data = data + "";
var fr = "";
var isNeg = false;
if (data[0]=="-"){
isNeg = true;
data = data.substr(1);
}
for (var i = 0,j=0; i < data.length; i++,j++) {
if (data[j]==".") j=-1;
if (j%3==0 && j!=0 && fr.indexOf('.')==-1) fr = fr + split;
fr = fr + data[i];
}
if (isNeg) fr = "-" + fr;
return fr;
}
/**
* <br>方 法 描 述:限制input输入,校验数字的合法性,以及格式化数值(添加分隔符)
* <br>参 数 说 明:
* obj: 当前对象,
* allowNegative: 是否允许为负 true:允许 false:不允许,
* positiveNumLen: 整数位长度,
* negativeNumLen: 小数位长度,0表示不允许输入小数
* split: 分隔符 不传值则不分隔("," 效果:23,667,231)
* <br>调 用 方 式:<input type="text" οninput="validateNumFun(this,true,6,5,',')"/>
* <br>创 建 人:jinzhaoqiang
* <br>创建时间:2018/6/15 9:54
* <br>修改备注:无
*/
function validateNumFun(obj,allowNegative,positiveNumLen,negativeNumLen,split){
var value = $(obj).val();
var param = [];
param.push(allowNegative);
param.push(positiveNumLen);
param.push(negativeNumLen);
return checkNum(value,param,obj,split);
}
</script>
</body>
</html>