【问题标题】:Convert int with starting zeros to string to check length将带有起始零的 int 转换为字符串以检查长度
【发布时间】:2015-05-04 16:56:37
【问题描述】:

我在 html 页面中有一个 html 输入 type="number" 字段。像这样:

<input type="number">

要验证表单,我需要检查该字段的长度是否正好为 3。为此,我将数字转换为字符串并执行 length() 函数。

当数字以零开头时,问题就来了。喜欢065

在这种情况下,toString() 方法输出一个长度为265

您对如何获得正确的数字长度有任何想法吗?

【问题讨论】:

  • 也许你应该将输入类型设置为字符串而不是数字,并在你真正需要它作为数字时转换为数字。
  • @lurker 出于这个原因,我更喜欢将我所有的数字输入作为字符串,并在我需要数字以使验证更容易时解析它们。
  • console.log("065".toString()); 仅打印 065
  • 你是如何检索一开始的号码的?
  • 我看不出你想做什么?如果你想要三个,但小于三个,用零填充?

标签: javascript integer tostring


【解决方案1】:

我认为您必须将输入类型设为文本,然后使用 JavaScript 获取长度以进行验证。之后,您可以使用 Number() 函数将其转换为数字。

【讨论】:

    【解决方案2】:

    将输入类型更改为文本并使用模式和最大长度限制输入:

    <input type="text" pattern="\d*" maxlength="3">
    

    【讨论】:

      【解决方案3】:

      您可以通过以下两种方式之一解决此问题:

      1. 当用户将焦点从字段上移开时,删除前导零
      2. 在验证中,删除前导零,然后检查长度

      无需转换为数字。

      在失去焦点时删除前导零:

      function truncateNumericInput(event) {
          event = event || window.event;
          event.target = event.target || event.srcElement;
      
          if (event.target.nodeName != "INPUT" || event.target.type != "number") {
              return;
          }
      
          var input = event.target,
              value = event.target.value;
      
          input.value = value.indexOf(".") > -1
              ? value.replace(/^0{2,}/, "0")
              : value.replace(/^0+/, "");
      }
      
      if (document.addEventListener) {
          document.addEventListener("blur", truncateNumericInput, true);
      } else {
          document.attachEvent("focusout", truncateNumericInput);
      }
      

      JSFiddle:http://jsfiddle.net/67jyg1d9/

      在验证期间删除前导零

      var regex = /^0+/;
      var value = input.value.replace(regex, "");
      
      console.log(value.length <= 3)
      

      【讨论】:

        【解决方案4】:
        <input type="number" name="quantity" min="0" max="999">
        

        这需要注意只能输入数字,并且只能输入到 999,即最多 3 位

        【讨论】:

          【解决方案5】:

          您可以通过使用输入类型作为数字来解决您的问题。您可以使用溢出和下溢来构建逻辑,如下所示。

          <input id="numtest" type="number" min="10" max="20" />
          
          document.getElementById('numtest').validity.rangeOverflow
          document.getElementById('numtest').validity.rangeUnderflow
            or 
          document.getElementById('numtest').checkValidity();
          

          rangeUnderflow:如果值小于 min,则返回 true
          rangeOverflow:如果值大于最大值,则返回 true。

          【讨论】:

            猜你喜欢
            • 2011-05-18
            • 2011-07-20
            • 2023-02-15
            • 2011-03-03
            • 2011-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-20
            相关资源
            最近更新 更多