【发布时间】: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