【问题标题】:Preserve leading zeros in int.toString()在 int.toString() 中保留前导零
【发布时间】:2020-06-11 15:15:43
【问题描述】:

我目前正在开发一个需要 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-change 逻辑来阻止输入任何非数字字符,但我不认为这是正确的解决方案。

感谢您的帮助。

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

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

【问题讨论】:

  • 你为什么有toString?输入返回字符串。
  • @NinaScholz 我不明白你的评论
  • @NinaScholz 在 angularjs 中,数字输入将使其模型成为整数
  • 然后更改模型。
  • @NinaScholz 把模型改成什么? JS 作为一种语言并没有真正的类型定义。如果我希望通过 angularjs ng-model 获取数字输入的字符长度,我必须将其转换为字符串。

标签: javascript angularjs string int


【解决方案1】:

我用:

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

由于 Chrome 删除了前导零。

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

您也可以检查:

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

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

【讨论】:

  • 谢谢,我最初忽略了您的回答,然后意识到您实际上将输入更改为文本并使用模式来限制它。
  • 没问题,我读了这个问题,但根据我的经验,浏览器似乎删除了前导 0,并且使用 type="text" 和模式我没有这个问题。您也可以检查type="tel" 和模式,两者都应该工作
猜你喜欢
  • 1970-01-01
  • 2011-10-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
相关资源
最近更新 更多