javascript - 脚本中只允许数字和点

标签 javascript asp.net regex 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>

但是 onkeypress(this) 事件在这个地方的那个函数中返回了 object required error

var amount = document.getElementById(txt).value;

我这里有什么错误?

最佳答案

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

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

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

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

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

你可以用这个替换你的代码:

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

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

请注意,您必须使用反斜杠对句点进行转义(否则它代表“任何字符”)。

有关在 javascript 中使用正则表达式的更多信息,请查看:

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


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

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

  • * 表示“前一个表达式的零个或多个。”

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

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

  • ? 表示“前一个字符的零个或一个。”

  • ^ 表示字符串的开头。

  • $ 代表一个字符串的结尾。

  • ^ 开始正则表达式并以 $ 结束正则表达式确保整个字符串符合正则表达式模式。

希望这对您有所帮助!

关于javascript - 脚本中只允许数字和点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9799505/

相关文章:

javascript - 在 Javascript 中放置图像

javascript - 谷歌脚本: Function to tally votes

asp.net - 不同机器上相同文化的不同 DateTimeFormat

c# - sendmail 函数显示 :Syntax error, 命令无法识别。服务器响应是:

java - 正则表达式读取Java中的特定文件格式

javascript - WebSocket 客户端无法通过企业代理连接到云服务器,除了网络浏览器! (超时)

javascript - 删除 float 的 '.'

c# - 来自 response.write() 的 ASP.net C# 文本未按我的意愿显示

javascript - JavaScript 中正则表达式的奇怪行为

java - 如何通过正则表达式从字符串中的多个相同字符中找到一个字符