在 int.toString() 中保留前导零

Preserve leading zeros in int.toString()

我目前正在开发一个需要 4 位密码输入的网络应用程序的一部分。

我用一段逻辑检查PIN码输入和PIN码确认输入至少4位并且是一样的

这是我的代码:

<md-input-containe>
    <label>New 4-digit PIN</label>
    <input ng-model="selectedDriver.password" type="number"
           ng-pattern="/^\d{4}$/" required>
</md-input-container>
<md-input-containe>
    <label>Confirm the PIN</label>
    <input ng-model="selectedDriver.passwordConfirm" type="number"
           ng-pattern="/^\d{4}$/" required>
</md-input-container>
<md-button class="md-raised" ng-click="saveDriver()"
           ng-disabled="selectedDriver.password != selectedDriver.passwordConfirm 
                     || selectedDriver.password.toString().length != 4">

要注意的主要部分是:

ng-disabled="selectedDriver.password != selectedDriver.passwordConfirm || selectedDriver.password.toString().length != 4"

问题是,假设输入了诸如 0123 之类的 pin,.toString() 会将其变成“123”,因为它删除了不必要的前导零,因此无法通过长度检查。

有哪些可能的解决方案?我查看了填充,但它似乎不够动态,无法满足我的需要,我需要一个简单的函数来接收任何输入,例如 0012 并将其转换为“0012”。

一个可能的解决方案是使用文本输入并使用一些 ng-change 逻辑来阻止输入任何非数字字符,但我认为这不是正确的解决方案。

感谢您的帮助。

编辑:显然我需要解释为什么这与 "padding" 问题不同。这是不同的,因为用户的输入可能类似于“38”,如果它是“38”,我不想盲目地将它填充到“0038”,如果他们输入了它,它应该只是“0038”。我不是那种不先搜索网络并尝试所有现有解决方案就在这里发帖的人。

接受的答案对其他 SO 用户非常有用,因为这里没有其他类似的答案。

我使用:

<input type="text" pattern="[0-9]*" ...>

因为 Chrome 删除了前导零。

使用此模式,数字小键盘显示在智能手机上。

您还可以查看:

<input type="tel" pattern="[0-9]*" ...>

这个似乎也保留了前导零。