仅允许脚本中的数字和点

itz*_*run 17 javascript regex asp.net validation

使用此javascript限制用户只键入数字,只有一个点作为小数点分隔符.

<script type="text/javascript">
 function fun_AllowOnlyAmountAndDot(txt)
        {
            if(event.keyCode > 47 && event.keyCode < 58 || event.keyCode == 46)
            {
               var txtbx=document.getElementById(txt);
               var amount = document.getElementById(txt).value;
               var present=0;
               var count=0;

               if(amount.indexOf(".",present)||amount.indexOf(".",present+1));
               {
              // alert('0');
               }

              /*if(amount.length==2)
              {
                if(event.keyCode != 46)
                return false;
              }*/
               do
               {
               present=amount.indexOf(".",present);
               if(present!=-1)
                {
                 count++;
                 present++;
                 }
               }
               while(present!=-1);
               if(present==-1 && amount.length==0 && event.keyCode == 46)
               {
                    event.keyCode=0;
                    //alert("Wrong position of decimal point not  allowed !!");
                    return false;
               }

               if(count>=1 && event.keyCode == 46)
               {

                    event.keyCode=0;
                    //alert("Only one decimal point is allowed !!");
                    return false;
               }
               if(count==1)
               {
                var lastdigits=amount.substring(amount.indexOf(".")+1,amount.length);
                if(lastdigits.length>=2)
                            {
                              //alert("Two decimal places only allowed");
                              event.keyCode=0;
                              return false;
                              }
               }
                    return true;
            }
            else
            {
                    event.keyCode=0;
                    //alert("Only Numbers with dot allowed !!");
                    return false;
            }

        }

    </script>

<td align="right">
<asp:TextBox ID="txtQ1gTarget" runat="server" Width="30px" CssClass="txtbx" MaxLength="6" onkeypress="return fun_AllowOnlyAmountAndDot(this);"></asp:TextBox>
</td>
Run Code Online (Sandbox Code Playgroud)

但onkeypress(this)事件在该位置返回该函数中的对象所需错误

var amount = document.getElementById(txt).value;
Run Code Online (Sandbox Code Playgroud)

我的错在哪里?

jah*_*roy 41

这是使用正则表达式的好地方.

通过使用正则表达式,您可以只用一行替换所有代码.

您可以使用以下正则表达式来验证您的要求:

[0-9]*\.?[0-9]*

换句话说:零个或多个数字字符,后跟零个或一个句点,后跟零个或多个数字字符.

您可以使用以下代码替换代码:

function validate(s) {
    var rgx = /^[0-9]*\.?[0-9]*$/;
    return s.match(rgx);
}
Run Code Online (Sandbox Code Playgroud)

该代码可以取代您的整个功能!

请注意,您必须使用反斜杠转义句点(否则它代表"任何字符").

有关使用javascript使用正则表达式的更多信息,请查看以下内容:

你也可以在这里测试上面的正则表达式:


上面使用的正则表达式的解释:

  • 括号表示" 这些括号内的任何字符 ".您可以使用连字符(如上所示)来指示一系列字符.

  • *意思是" 零个或多个先前的表达 ".

  • [0-9]*表示" 零个或多个数字 "

  • 反斜杠用作句点的转义字符,因为句点通常代表" 任何字符".

  • ?意思是" 零或前一个字符中的一个."

  • ^代表字符串的开头.

  • $表示字符串的结束.

  • 启动正则表达式^并结束它$确保整个字符串遵循正则表达式模式.

希望这可以帮助!

  • 不是正则表达式专家,但我必须使用/^[0-9-]*\.?[0-9]*$/来匹配负数。感谢您的回答。 (2认同)

nic*_*ist 16

请改用Jquery.在文本框中添加一个十进制类:

<input type="text" class="decimal" value="" />
Run Code Online (Sandbox Code Playgroud)

在JS中使用此代码.它检查多个小数,并限制用户只键入数字.

$('.decimal').keyup(function(){
    var val = $(this).val();
    if(isNaN(val)){
         val = val.replace(/[^0-9\.]/g,'');
         if(val.split('.').length>2) 
             val =val.replace(/\.+$/,"");
    }
    $(this).val(val); 
});?
Run Code Online (Sandbox Code Playgroud)

检查这个小提琴:http://jsfiddle.net/2YW8g/

希望能帮助到你.


小智 9

而不是使用这个:

onkeypress="return fun_AllowOnlyAmountAndDot(this);"

你应该用这个:

onkeypress="return fun_AllowOnlyAmountAndDot(this.id);"


小智 6

function isNumberKey(evt,id)
{
	try{
        var charCode = (evt.which) ? evt.which : event.keyCode;
  
        if(charCode==46){
            var txt=document.getElementById(id).value;
            if(!(txt.indexOf(".") > -1)){
	
                return true;
            }
        }
        if (charCode > 31 && (charCode < 48 || charCode > 57) )
            return false;

        return true;
	}catch(w){
		alert(w);
	}
}
Run Code Online (Sandbox Code Playgroud)
<html>
  <head>
  </head>
  <body>
    <INPUT id="txtChar" onkeypress="return isNumberKey(event,this.id)" type="text" name="txtChar">
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)


小智 6

只需在输入文本中添加以下代码:

onkeypress='return event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)'
Run Code Online (Sandbox Code Playgroud)


小智 5

<input type="text" class="decimal" value="" />
$('.decimal').keypress(function(evt){
    return (/^[0-9]*\.?[0-9]*$/).test($(this).val()+evt.key);
});
Run Code Online (Sandbox Code Playgroud)

我认为这个简单的解决方案可能是。