<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 />

解决方案 »

  1.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <SCRIPT LANGUAGE="JavaScript">function check(str){

    //判断有几个小数点
    var reg1=/\./g;
    if(str.match(reg1)!=null&reg1.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>
      

  2.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "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>
      

  3.   

    Modified Edition<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "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>
      

  4.   

    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]; //这个要加上兄弟

    }
      

  5.   

    wuxinlangman(无心之尘 上来看看) ,下面这部分可能会出问题吧?
    //如果没有小数点
    if(!reg1.test(str)){
    //如果超过8位
    if(str.length>8){
    alert("不能超过8位");
    return;
    }else{
    //替换,-.为空
    str=str.replace(/[,-.]/g,"");
    因为字符串中,可能是已经包含“,”的,而此时直接判断长度是否超过8位,是不会有点错误?
      

  6.   

    wzhiyuan(我是谁) :
    正常输入的时候,效果不错。
      

  7.   

    你可以直接把if else去掉
    我这里判断如果是没有小数点的话就不用判断
      

  8.   

    rcom10002(KNIGHTRCOM) :
    你的方法是最有效的。我决定采用你的方法。以后有时间再自己尝试写写,唉,时间太紧张了。
    echo_php() :
    补充的很及时!
    另外,
    1、如何允许前面输入“-”号?
    2、小数位如果超过2位,能够自动圆整?即四舍五入?
    谢谢!
      

  9.   

    wuxinlangman(无心之尘 上来看看) :
    但是后面还是最终要判断小数点前面位数的,即数字长度不能超过8。
    这是一个收入值,根据实际情况考虑,不会超过99,999,999。也就是一个亿。
      

  10.   

    偶来了 偶写了一段代码 经过简单的测试可以<input type="text" onchange="aa(this)" />
    <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>
      

  11.   

    想要四舍五入的给你~~~  
    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("数字不合法");
    }
    }
    准备拿分啦
      

  12.   

    呵呵 这个问题  
     /xxxx/ig; 等于 new RegExp("xxxx","ig");
    所以 /(xxxx)/ 就有 RegExp.$1 了
      

  13.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "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>
    我做了一个简单的例子,基本上能实现你的想法
      

  14.   

    <script language="javascript">
    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>
      

  15.   

    非产感谢各位的热心回复,特别感谢:rcom10002(KNIGHTRCOM)。
    给分了!
      

  16.   

    gzdiablo() :很抱歉,以后我会慢慢欣赏的。不是说您的代码不好,只是我现在实在没有时间验证了,找时间我会仔细研读的。