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



我目前正在开发一个web应用程序的一部分,该应用程序接受4位pin输入。

我使用一段逻辑来检查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这样的引脚,.toString((会将其变成"123",因为它会删除不必要的前导零,因此无法通过长度检查。

有哪些可能的解决方案?我看了填充,但它似乎不够动态,无法满足我的需要,我需要一个简单的函数,它可以接受任何像0012这样的输入,并将其转换为"0012"。

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

谢谢你的帮助。

编辑:显然,我需要解释为什么这与"填充"问题不同。这是不同的,因为用户的输入可能是类似于"38"的东西,如果是"38",我不想无意识地将其填充到"0038",只有当他们键入了"0038(时,它才应该是"0038(0038("。我不是一个不先浏览网页并尝试所有现有解决方案就在这里发帖的人。

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

我使用:

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

由于Chrome删除了前导零。

通过这种模式,智能手机上会显示数字键盘。

您也可以查看:

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

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

最新更新