从输入 type=number 中删除前导零

Remove leading zeros from input type=number

我注意到,如果我使用 <input type="number" />,则不会删除前导零。我还看到很多关于如何 保持 前导零的讨论。

例如“000023”和“23”是相同的数字,我认为保留这些零没有意义。

Html 输入标签总是 return 文本,而不是数字,甚至它的内容可以被强制转换为数字格式、日期等...

接下来您应该将该输入转换为实际数字格式:

parseInt(myNum); // If you expect an integer.
parseFloat(myNum); // If you expect floating point number.

只需使用像这样的正则表达式

textboxText= textboxText.replace(/^0+/, '')

你可以试试这个。

    str1 = str.replace(/^0+/,'');

试试这个:

<!DOCTYPE html>
<html>
<body>

<input type="number" id="txtfield" /><button onclick="myFunction()">Try it</button>

<script>
function myFunction() {
    var myNumber = document.getElementById("txtfield").value;
    document.write(parseInt(myNumber ,10));
}
</script>

</body>
</html>

HTML5 有 <input type="tel"> 用于此目的

我将举一个反应用法的例子。它使用 state 存储字段的值。但是,我认为你可以用你喜欢的任何变量替换它。

<input type='number' value={Number(this.state.myNumber).toString()}/>

在我的例子中,myNumber 存储了一个年份数字。这样,年份 2018(例如)就不会被错误地显示为 02018

将 step="any" 添加到您的输入标签。 如果这在您的浏览器上不起作用,请将类型更改为 type="tel"

我在使用 React 时使用的 hack 是将数字公开转换为字符串。
使用 value=myNumber.toString(),而不是 value=myNumber.
仅当输入类型为“数字”时才需要,如果类型为“文本”时则不需要。

如果您的变量初始化为 null,您可以通过将错误值更改为 0 来防止错误,如:value=(myNumber || 0).toString().

class inputHours extends React.Component {

    this.state = { hours: 0};

    render() {
      return ( 
              <label>Hours: could show Leading 0's</label>
              <input  type="number" min="0" max="24"
                      value={this.state.hours}
                      onChange={this.onChangeHours}
              />

              <label>Hours: strips leading zeros</label>
              <input type="number" min="0" max="24"
                      value={this.state.hours.toString()}
                      onChange={this.onChangeHours}
              />
      );
    } 

在第一种情况下,即使您在 onChangeHours 处理程序中去除前导零,也会通过 parseInt() 强制转换回整数,并调用 setState() 来保存数字将前导零返回到状态对象,告诉 React 重新渲染,输入字段本身不会更新以删除任何前导零。
但是这个问题只有在输入类型设置为“数字”时才会出现。
如果它设置为键入“文本”,则没有问题,前导零将按预期删除。
在这两种情况下,console.log() 表明存储在 state 中的值确实去除了前导零(允许单个 0 作为值。)
即使输入字段本身可能显示额外的前导零。

我最好的猜测是 React 在内部看到一个整数 0 === 000,所以它不会更新显示??? 但是在文本字符串中,'0' != '000',所以它知道它必须更新呈现的字段。
无论如何,明显的强制转换似乎迫使输入字段正确更新和重新呈现。