比如三位数字,两位小数,复制和拖拽的事件我屏蔽了。
<input onkeypress="return /^[1-9]\d{2}/.test(this.value)?(/\./.test(this.value)?(/\.\d{2}/.test(this.value)?(event.keyCode==46):(event.keyCode>=48&&event.keyCode<=57)):(event.keyCode==46)):(event.keyCode>=48&&event.keyCode<=57)"
 onpaste="return false" ondragenter="return false" style="ime-mode:disabled">

解决方案 »

  1.   

    写的有点烦琐, 直接给出keyCode的范围就可以了. 另外还要注意退格健和DEL健
      

  2.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function checknum()
    {
    var intConut = '2';
    var floatCount = '2';    var str = "/^[1-9]\d{" + intConut + "}/.test(window.event.srcElement.value)?(/\./.test(window.event.srcElement.value)?(/\.\d{" + floatCount + "}/.test(window.event.srcElement.value)?(event.keyCode==46):(event.keyCode>=48&&event.keyCode<=57)):(event.keyCode==46)):(event.keyCode>=48&&event.keyCode<=57)";
    return eval(str);}//-->
    </SCRIPT>
    </HEAD><BODY>
    <input onkeypress="checknum()"
    onpaste="return false" ondragenter="return false" style="ime-mode:disabled">
    </BODY>
    </HTML>
    为什么我写成上面的函数形式就无法检测呢,还报错:(
      

  3.   

    "/^[1-9]\d{" + intConut + "}/这里的正则不能这么写
    要写成new RegExp()这种
      

  4.   

    <input onkeypress="show(this,3,2)"
     onpaste="return false" ondragenter="return false" style="ime-mode:disabled">
     <script language=javascript>
      function show(obj,m,n)
      {  var re1=new RegExp("^[1-9]\\d{"+(m-1)+"}")
      var re2=new RegExp("\\.\\d{"+n+"}")
      if(re1.test(obj.value))
      {
      if(/\./.test(obj.value))
      {
      if(re2.test(obj.value))
      {
      event.returnValue=false;
      }
      else
      {
      if(!(event.keyCode>=48&&event.keyCode<=57))
      {
      event.returnValue=false;
      }
      }
      }
      else
      {
      if(event.keyCode!=46)
      {
      event.returnValue=false;
      }
      }
      }
      else
      {
      if(!(event.keyCode>=48&&event.keyCode<=57))
      {
      event.returnValue=false;
      }
      }
      }
     </script>
      

  5.   

    function checknum()
    {  var intreg   = new RegExp("/^[1-9]\d{2}/");
      var dotreg   = new RegExp("/\./");
      var floatreg = new RegExp("/\.\d{2}/");  var myvalue = window.event.srcElement.value;  var str = "intreg.test(myvalue)?(dotreg.test(myvalue)?(floatreg.test(myvalue)?(event.keyCode==46):(event.keyCode>=48&&event.keyCode<=57)):(event.keyCode==46)):(event.keyCode>=48&&event.keyCode<=57)";  return eval(str);
    }<input id='test' onkeypress="return checknum()"
     onpaste="return false" ondragenter="return false" style="ime-mode:disabled">难道是语法还有问题吗,js比java怎么难这么多:(
      

  6.   

    是的
     var intreg   = new RegExp("/^[1-9]\d{2}/");
    这里需要转意
     var intreg   = new RegExp("/^[1-9]\\d{2}/");
    并且在函数中直接return好象不行
      

  7.   

    看来我自己也得学习一下js的正则表达式的用法了 thx hbhbhbhbhb1021 :)