帮助改进这个 javascript 输入掩码

发布于 2024-10-19 09:27:44 字数 1156 浏览 2 评论 0原文

功能

  • 仅限数字
  • 唯一的点 (.)

但是...我需要改进允许用户数字点后仅两个数字

有效示例:

  • 121213
  • 123450.10
  • 12345678910111213.39

当前代码 (改编自这个不需要保留完全相同的代码...):

<HTML>
   <HEAD>
   <SCRIPT language=Javascript>
      <!--
      function isNumberKey(evt,obj){

         var containsDot = obj.value.indexOf(".");

         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode > 31 && (charCode < 48 || charCode > 57)){
              if(charCode == 46 && containsDot < 0){
                return true;
              }
                return false;
         }
         return true;
      }
      //-->
   </SCRIPT>
   </HEAD>
   <BODY>
      <INPUT id="txtChar" onkeypress="return isNumberKey(event,this)" type="text" name="txtChar">
   </BODY>
</HTML>

Features

  • Only numbers
  • A unique dot (.)

But...i need improve to allow user digits only two numbers after the dot

Valid examples:

  • 121213
  • 123450.10
  • 12345678910111213.39

The current code (adapted from this, not need to keep exactly the same code...) :

<HTML>
   <HEAD>
   <SCRIPT language=Javascript>
      <!--
      function isNumberKey(evt,obj){

         var containsDot = obj.value.indexOf(".");

         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode > 31 && (charCode < 48 || charCode > 57)){
              if(charCode == 46 && containsDot < 0){
                return true;
              }
                return false;
         }
         return true;
      }
      //-->
   </SCRIPT>
   </HEAD>
   <BODY>
      <INPUT id="txtChar" onkeypress="return isNumberKey(event,this)" type="text" name="txtChar">
   </BODY>
</HTML>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

Bonjour°[大白 2024-10-26 09:27:45

只需使用正则表达式即可。例如

function isNumberKey(evt, obj){
    return obj.value.match(/[0-9]*(\.[0-9]{0,2})?/)
}

Just use a regular expression. E.g.

function isNumberKey(evt, obj){
    return obj.value.match(/[0-9]*(\.[0-9]{0,2})?/)
}
且行且努力 2024-10-26 09:27:45

我在这里发布了完整的工作版本: http://jsfiddle.net/georgecalm/NRtVs/ 2/

HTML:

<input id="txt" type="text" name="txtChar" />

JS:

var isStrValid = function(str) {
  return ((str.match(/[^\d^.]/) === null) 
       && (str.replace(/\d+\.?\d?\d?/, "") === ""));
};

var node = dojo.byId("txt");
dojo.connect(node, "onkeyup", function() {
    if (!isStrValid(node.value)) {
      node.value = node.value.substring(0, node.value.length-1);
    }
});

第一次检查(isStrValid)确保除了数字和点之外没有任何内容。第二个检查模式。

I've posted a fully working version of this here: http://jsfiddle.net/georgecalm/NRtVs/2/

HTML:

<input id="txt" type="text" name="txtChar" />

JS:

var isStrValid = function(str) {
  return ((str.match(/[^\d^.]/) === null) 
       && (str.replace(/\d+\.?\d?\d?/, "") === ""));
};

var node = dojo.byId("txt");
dojo.connect(node, "onkeyup", function() {
    if (!isStrValid(node.value)) {
      node.value = node.value.substring(0, node.value.length-1);
    }
});

The first checks (of the isStrValid) makes sure you don't have anything but numbers and a dot. The second checks the pattern.

隔纱相望 2024-10-26 09:27:45

如果它有一个点,但后面没有两位数字,则返回 false。

if(containsDot && obj.value.split(".")[1].length != 2){
  return false; 
}

If it has a dot, but does not have two digits after it, return false.

if(containsDot && obj.value.split(".")[1].length != 2){
  return false; 
}
静谧幽蓝 2024-10-26 09:27:45

您可以通过以下方式启动该功能

if (obj.value.match(/\.[0-9][0-9]/)) {
    // Already has two decimals
    return false;
}

You can start off the function with

if (obj.value.match(/\.[0-9][0-9]/)) {
    // Already has two decimals
    return false;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文