<script language=javascript>
function validFormatNum(oinput){
var nums=oinput.value;
if(!isNaN(parseFloat(nums))){
var num=new Number(nums);
oinput.value=num.toLocaleString();//转化为本地格式化的字符串
}else{
alert("不是数字");
oinput.focus();
}
}
</script>
<input onblur="validFormatNum(this)" language=javascript />
function validFormatNum(oinput){
var nums=oinput.value;
if(!isNaN(parseFloat(nums))){
var num=new Number(nums);
oinput.value=num.toLocaleString();//转化为本地格式化的字符串
}else{
alert("不是数字");
oinput.focus();
}
}
</script>
<input onblur="validFormatNum(this)" language=javascript />
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript">function check(str){
//判断有几个小数点
var reg1=/\./g;
if(str.match(reg1)!=null®1.test(str)){
if(str.match(reg1).length>2)
alert("不能有两个小数点");
return;
}
//如果没有小数点
if(!reg1.test(str)){
//如果超过8位
if(str.length>8){
alert("不能超过8位");
return;
}else{
//替换,-.为空
str=str.replace(/[,-.]/g,"");
//除以3
var num=Math.ceil(eval(str.length/3));
var a="";
var ss=[];
//截取字符串并把它放入ss数组中
for(var i=0;i<num;i++){
ss[i]=str.substring(str.length-3*(1+i),str.length-3*(i));
}
str=ss.reverse().join(",");
alert("整理后的str是:"+str);
return;
}
}else{
var strArray=str.split(".");
if(strArray[0].length>8){
alert("小数点前面不能超过8位");
return ;
}
if(strArray[1].length>2&typeof strArray[1]!="undefined"){
alert("小数点后面不能超过2位");
return ;
}
var aa=str.match(/[^\d]/g).join("");
if(/[^,-.]/g.test(aa)){
alert("不能有除了,.-之外的符号出现");
return;
}else{
var strArray1=str.split(".");
str=strArray1[0].replace(/[,-.]/g,"");
var num=Math.ceil(eval(str.length/3));
var a="";
var ss=[];
for(var i=0;i<num;i++){
ss[i]=str.substring(str.length-3*(1+i),str.length-3*(i));
}
str=ss.reverse().join(",");
alert("整理后的str是:"+str+"."+strArray1[1]);
}
}
}
//-->
</SCRIPT>
</HEAD><BODY>
<INPUT TYPE="text" NAME="" onblur=check(this.value)></BODY>
</HTML>
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script language="javascript">
function validate(obj) {
var regex = /^\d[\d,]*([.]\d{1,2})?$/; // 123,456.09 or 123456 or 1,23,,,45,6.09 or 123456,,,,,.09
if (!obj.value.match(regex)) {
alert('error');
obj.focus();
return;
}
// remove all commas
obj.value = obj.value.replace(/,/g, "");
var nums = null;
if (obj.value.indexOf(".") != -1) {
nums = obj.value.split(/[.]/);
nums[0] += "";
} else {
nums[0] = obj.value;
nums.length = 1;
}
// format
var offsetPos = 0;
var numParts = "";
var integers = "";
if (nums[0].length > 3) {
offsetPos = nums[0].length % 3;
integers = nums[0].substring(0, offsetPos);
for (var i = 0; i < Math.floor(nums[0].length / 3); i++) {
numParts[i] = nums[0].substr(offsetPos, 3);
integers += "," + nums[0].substr(offsetPos, 3);
offsetPos += 3;
}
}
obj.value = integers + "." + nums[1];
}
</script>
</head><body>
<form>
<input type="text" onblur="validate(this)" id="m" value="5,2,35.46" />
</form>
</body>
</html>
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script language="javascript">
function validate(obj) {
var regex = /^\d[\d,]*([.]\d{1,2})?$/; // 123,456.09 or 123456 or 1,23,,,45,6.09 or 123456,,,,,.09
if (!obj.value.match(regex)) {
alert('format is error');
obj.focus();
return;
}
if (obj.value.replace(/,/g, "").split(/[.]/)[0].length > 8) {
alert('lenghth is more than 8');
obj.focus();
return;
}
// remove all commas
obj.value = obj.value.replace(/,/g, "");
var nums = null;
if (obj.value.indexOf(".") != -1) {
nums = obj.value.split(/[.]/);
nums[0] += "";
} else {
nums = new Array();
nums[0] = obj.value;
nums.length = 1;
}
// format
var offsetPos = 0;
var numParts = "";
var integers = "";
if (nums[0].length > 3) {
offsetPos = nums[0].length % 3;
integers = nums[0].substring(0, offsetPos);
for (var i = 0; i < Math.floor(nums[0].length / 3); i++) {
numParts[i] = nums[0].substr(offsetPos, 3);
if (integers.length > 0) {
integers += "," + nums[0].substr(offsetPos, 3);
} else {
integers += nums[0].substr(offsetPos, 3);
}
offsetPos += 3;
}
}
if (nums[1] != null) {
obj.value = integers + "." + nums[1];
} else {
obj.value = integers;
}
}
</script>
</head><body>
<form>
<input type="text" onblur="validate(this)" id="m" value="5,2,35.46" />
</form>
</body>
</html>
offsetPos = nums[0].length % 3;
integers = nums[0].substring(0, offsetPos);
for (var i = 0; i < Math.floor(nums[0].length / 3); i++) {
numParts[i] = nums[0].substr(offsetPos, 3);
if (integers.length > 0) {
integers += "," + nums[0].substr(offsetPos, 3);
} else {
integers += nums[0].substr(offsetPos, 3);
}
offsetPos += 3;
}
}
else{
integers=nums[0]; //这个要加上兄弟
}
//如果没有小数点
if(!reg1.test(str)){
//如果超过8位
if(str.length>8){
alert("不能超过8位");
return;
}else{
//替换,-.为空
str=str.replace(/[,-.]/g,"");
因为字符串中,可能是已经包含“,”的,而此时直接判断长度是否超过8位,是不会有点错误?
正常输入的时候,效果不错。
我这里判断如果是没有小数点的话就不用判断
你的方法是最有效的。我决定采用你的方法。以后有时间再自己尝试写写,唉,时间太紧张了。
echo_php() :
补充的很及时!
另外,
1、如何允许前面输入“-”号?
2、小数位如果超过2位,能够自动圆整?即四舍五入?
谢谢!
但是后面还是最终要判断小数点前面位数的,即数字长度不能超过8。
这是一个收入值,根据实际情况考虑,不会超过99,999,999。也就是一个亿。
<script language="javascript">
function aa(inputobj)
{
var text = inputobj.value;
var re = /(^-?(?:(?:\d{0,3}(?:,\d{3})*)|\d*))(\.\d{1,2})?$/; //验证财务数字是否合法 $1为整数部分 $2为带小数点的小数部分
tempstr = tempstr.replace(/,/g,"");//去除所有","号
var tempint = 0;
var tempstr = "";
if(re.test(text))
{
tempint = parseInt(RegExp.$1);//把整数部分转换成数字
if(!isNaN(tempint) && Math.abs(tempint)<100000000)//判断整数部分是否是数字 或 绝对值是否大于1亿
{
//循环 以千位为基础 加","号
while(tempint>1000)
{
tempstr = "," + (tempint % 1000) + tempstr;
tempint = Math.floor(tempint/1000);
}
tempstr = "" + tempint + tempstr + RegExp.$2;//加上小数位
inputobj.value = tempstr;//把成功的结果写回input里面
}
else
{
alert("数字不合法");
}
}
else
{
alert("数字不合法");
}
}
</script>
function aa(inputobj)
{
var text = inputobj.value;
var re = /(^-?(?:(?:\d{0,3}(?:,\d{3})*)|\d*))(\.\d+)?$/; //验证财务数字是否合法 $1为整数部分 $2为带小数点的小数部分
tempstr = text.replace(/,/g,"");//去除所有","号
var tempint = 0;
var tempstr = "";
if(re.test(text))
{
tempint = parseInt(RegExp.$1);//把整数部分转换成数字
if(!isNaN(tempint))//判断整数部分是否是数字 或 绝对值是否大于1亿
{
//我也很无奈javascript的小数处理有问题 0.155 * 100 它等于 15.49999999 郁闷
var tempint1 = 0;
var tempint2 = 0;
if(RegExp.$2.length>3)
{
tempint1 = parseInt(RegExp.$2.charAt(3));
tempint2 = parseInt(RegExp.$2.substr(1,2));
if(tempint1>4)tempint2++;
if(tempint2>100)
{
tempint++;
tempint2 = 0;
}
}
if(Math.abs(tempint)<100000000)
{
//循环 以千位为基础 加","号
while(tempint>1000)
{
tempstr = "," + (tempint % 1000) + tempstr;
tempint = Math.floor(tempint/1000);
}
tempstr = "" + tempint + tempstr + "." + tempint2;//加上小数位
inputobj.value = tempstr;//把成功的结果写回input里面
}
else
{
alert("数值过大");
}
}
else
{
alert("数字不合法");
}
}
else
{
alert("数字不合法");
}
}
准备拿分啦
/xxxx/ig; 等于 new RegExp("xxxx","ig");
所以 /(xxxx)/ 就有 RegExp.$1 了
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script>
function myFun()
{
var txt = document.getElementById("txt");
var reg = /,/g;
var value = txt.value.replace(reg,"");
reg = /-/g;
value = value.replace(reg,""); if ( value.search(/^[0-9]{1,8}[.]{0,1}[0-9]{0,2}$/)==-1 )
{
alert("数据验证失败");
return false;
}
// 格式化数据
myF(value);
}
function myF(strVal)
{
var Ftxt = document.getElementById("Ftxt");
var arr = strVal.split(".");
// 整数部分
var intP = arr[0];
// 分割方式三位一截取
var sp = Math.floor(intP.length/3);
var spy = intP.length/3 - Math.floor(intP.length/3);
var strT = "";
if ( sp> 0 && spy>0 )
{
var count = 0;
for ( var jj=intP.length;jj>0;jj-- )
{
if ( count == 3 )
{
strT += ",";
count = 0;
}
strT += intP.substr(jj-1,1);
count++;
}
//alert(strT);
var strArr = strT.split(",");
strT = "";
for ( var i=strArr.length;i>0;i-- )
{
if ( strArr[i-1] != "" && strArr[i-1] != undefined)
{
strT += reversal(strArr[i-1]) + ",";
}
}
// 删除最后的逗号
if ( strT.length > 0 )
{
strT = strT.substring(0,strT.length-1);
}
}
if ( strT != "" )
{
strT += "." + arr[1];
Ftxt.value = strT;
return ;
}
Ftxt.value = strVal;
return ;
}
function reversal(strVal)
{
var strRet = "";
var strArr = strVal.split("");
for ( var i=strArr.length;i>0;i-- )
{
if ( strArr[i-1] != "" && strArr[i-1] != undefined)
{
strRet += strArr[i-1];
}
}
return strRet;
}
</script>
</head><body>
输入数据:<input type="text" id="txt">
<input type="button" value="验证" onClick="myFun()">
验证通过格式化完毕数据:<input type="text" id="Ftxt">
</body>
</html>
我做了一个简单的例子,基本上能实现你的想法
function validate(obj) {
var regex = /^-?\d[\d,]*([.]\d+)?$/; // 123,456.0129 or -123456 or -1,23,,,45,6.0909 or 123456,,,,,.09
if (!obj.value.match(regex)) {
alert('format is error');
obj.focus();
return;
}
if (obj.value.replace(/[-,]/g, "").split(/[.]/)[0].length > 8) {
alert('lenghth is more than 8');
obj.focus();
return;
}
// check if there is a "minus" in the obj.value
var hasMinus = obj.value.indexOf("-") != -1 ? true : false;
// remove all commas and "minus"
obj.value = obj.value.replace(/[-,]/g, "");
// get integer part and decimal part
var nums = null;
if (obj.value.indexOf(".") != -1) {
nums = obj.value.split(/[.]/);
nums[0] += "";
} else {
nums = new Array();
nums[0] = obj.value;
nums.length = 1;
}
// round the decimal
var real = nums[0] + (nums[1] == null ? "" : ("." + nums[1]));
real = String(Math.round(real * 100) / 100);
nums[0] = real.split(/[.]/)[0];
nums[1] = real.split(/[.]/)[1];
alert(nums[1]);
// format
var offsetPos = 0;
var numParts = "";
var integers = "";
if (nums[0].length > 3) {
offsetPos = nums[0].length % 3;
integers = nums[0].substring(0, offsetPos);
for (var i = 0; i < Math.floor(nums[0].length / 3); i++) {
numParts[i] = nums[0].substr(offsetPos, 3);
if (integers.length > 0) {
integers += "," + nums[0].substr(offsetPos, 3);
} else {
integers += nums[0].substr(offsetPos, 3);
}
offsetPos += 3;
}
} else {
integers = nums[0];
}
if (nums[1] != null) {
obj.value = integers + "." + nums[1];
} else {
obj.value = integers;
}
obj.value = hasMinus ? "-" + obj.value : obj.value;
}
</script>
给分了!