很久没来CSDN了,看到有问校验金额的正则表达式帖子,自己试了一下。用的是RegexTester.exe。写完后测试没问题了,不过写成JS的时候提示出错,请熟悉JS的朋友看看。
要求:
1 整数或小数。如果是小数,小数点后最多有两位小数
2 0~9及.外的字符都过滤掉
3 第一位是0时第二位不可以是0Regex:
([0]|([1-9]\d*))\.(\d{0,2})Source:
0.01
0.001
1.0
1.
10.01
10.001
fd
fs.01Matches:
0.01
0.00
1.0
1
10.01
10.00
页面代码:
<script language="javascript">
function test(oDJ)
{
  oDJ.value=oDJ.value.replace(/([0]|([1-9]\d*))\.(\d{0,2})/g,'');
}
</script>
<input type="text" width="200px" onKeyUp="javascript:test(this)" onChange="javascript:test(this)" />

解决方案 »

  1.   


    <html>
    <script language="javascript">
    function test()
    {
      document.getElementById("id").innerHTML=document.getElementById("input").value.match(/(^[0]$|(^[1-9]\d*$))|((^[0]|(^[1-9]\d*))\.(\d{0,1})\d$)/g);
    }
    </script>
    <input type="text" id="input"/><input type="button" value="click me" onclick="test()">
    <div id="id"></div>
    </body>
    </html>至少你上面给出的都能正确匹配了
      

  2.   


    输入“1.”时候的结果是NULL,发现自己也漏了这种情况,另外还应该限制一下小数点只能出现一次或没有,在最后加个“?”吧。
    还是回到开始时的疑问:JS应该怎么写才可以发挥出正则的优势——按预定格式输入(过滤非预定字符)?
      

  3.   


    就用onchange时候监听即可. 不过正则的消耗太大, 如果大量使用的话会大量消耗资源, 这点要注意了. 
      

  4.   

    用了N多个正则,总算实现了~<script language="javascript">
    function FomatFloat(text_obj,IsBlur){  
        var s = text_obj.value;
        if(s==null || s==undefined || s=="") return;
        s = s.replace(/([^\d\.])/ig, "");
        s = s.replace(/^\./, "0.");
        s = s.replace(/^(0+)(\d+)/, "$2");
        s = s.replace(/^([\d]*\.[\d]{0,2})(.*)/ig, "$1");
        if(IsBlur){
         //s = s.replace(/\.$/,"");
         //补齐小数位(不用补齐时用上面那句)
         s = s.replace(/^(\d+)$/, "$1.");
         s = s.replace(/(\.)(\d*)$/ig, function($1){return $1.length<3? $1+"00".substr(0,3-$1.length) : $1;});
        }
        text_obj.value = s;
    }
    </script>
    <input type="text" onkeyup="FomatFloat(this,0);" onblur="FomatFloat(this,1);"/>
      

  5.   

    忘考虑只有小数的情况了
    ^[^0]\d+.\d{2}$|0.\d{2}$
      

  6.   


    有够折腾的,厉害,服了,JS里面只replace一次达不到只允许输入预定字符和预定格式效果吗算了,结贴吧,要不又有人建议去看书了