Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将起始为零的int转换为字符串以检查长度_Javascript_Integer_Tostring - Fatal编程技术网

Javascript 将起始为零的int转换为字符串以检查长度

Javascript 将起始为零的int转换为字符串以检查长度,javascript,integer,tostring,Javascript,Integer,Tostring,我在html页面中有一个html输入type=“number”字段。像这样: <input type="number"> 要验证表单,我需要检查此字段的长度是否正好为3。为此,我将数字转换为字符串并执行length()函数 当数字以零开始时,问题就出现了。像065 在这种情况下,toString()方法输出长度为2的65 你知道如何得到正确的数字长度吗 我认为您必须将输入类型设置为文本,然后使用JavaScript获取验证长度。之后,您可以使用number()函数将其转换为数字

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

<input type="number">

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

当数字以零开始时,问题就出现了。像
065

在这种情况下,
toString()
方法输出长度为
2的
65


你知道如何得到正确的数字长度吗

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

将输入类型更改为text,并使用pattern和maxlength限制输入:

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

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

  • 当用户将焦点从字段移开时,删除前导零
  • 在验证中,删除前导零,然后检查长度
  • 不需要转换为数字

    焦点丢失时删除前导零:

    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:

    在验证过程中删除前导零

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

    这需要注意的是,只能输入数字,直到999,即最多3位,您可以使用输入类型作为数字来解决问题。您可以使用溢出和下溢来构建逻辑,如下所示

    <input id="numtest" type="number" min="10" max="20" />
    
    document.getElementById('numtest').validity.rangeOverflow
    document.getElementById('numtest').validity.rangeUnderflow
      or 
    document.getElementById('numtest').checkValidity();
    
    
    document.getElementById('numtest').validity.rangeOverflow
    document.getElementById('numtest').validity.rangeUnderflow
    或
    document.getElementById('numtest').checkValidity();
    
    rangeUnderflow:如果值小于最小值,则返回true

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

    也许您应该将输入类型设置为字符串而不是数字,并在确实需要将其转换为数字时转换为数字。@出于这个原因,我更喜欢将所有数字输入设为字符串,并在以后需要数字时对其进行解析,以便于验证。
    console.log(“065.toString());
    仅打印
    065
    如何在开始时检索数字?我看不出你想做什么?如果你想要正好三个,并且少于三个,用零填充它?
    <input id="numtest" type="number" min="10" max="20" />
    
    document.getElementById('numtest').validity.rangeOverflow
    document.getElementById('numtest').validity.rangeUnderflow
      or 
    document.getElementById('numtest').checkValidity();