toString (). длина для числа с нулями и только нули всегда возвращает 0 - PullRequest
0 голосов
/ 30 августа 2018

Я работаю над страницей, которая принимает 4-значный (ровно 4-значный) пин от пользователей. Как то так.

<input type="number" ng-model="passCode" class="form-control" onpaste="return false" id="passCodeField"  ng-disabled="!enablePassCode" ng-change="onInputPasscode()" ng-keypress="onKeyPressPasscode($event)"/>

Функция onKeyPressPasscode

$scope.onKeyPressPasscode = function($event) {
    if(isNaN(String.fromCharCode($event.which || $event.keyCode))){
        $event.preventDefault();
     }
}

Функция onInputPasscode ():

$scope.onInputPasscode = function() {
    if ($scope.passCode.toString().length > 4){
        $scope.passCode = $scope.passcode;
    }
    if($scope.passCode.toString().length == 4) {
         $scope.passcode = $scope.passCode;
         $scope.disableContinue = false;
         session.put('pinFlow',true);
    } else {
         console.log("current length - " + $scope.passCode);
         $scope.disableContinue = true;
         session.put('pinFlow',false);
    }

}

Это сбой, когда на входе все нули. Т.е. текущая длина не обновляется, следовательно, пользователю разрешено вводить столько нулей, сколько он хочет. Как мне взять 4-значные нули в качестве входных данных и при этом соответствовать имеющимся у меня проверкам?

debugging image

Это в угловой 1.5.8v. И я не эксперт в AngularJS. Так что любая помощь будет оценена. Кроме того, пожалуйста, дайте мне знать, если нужна какая-либо другая информация Я обновлю ответ соответственно.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Причиной вашей проблемы является то, что если ваша схема ПИН-кода допускает нули ведущих, number не является идеальным типом для этого (поскольку в числах ведущие нули могут быть опущены без изменения значения).

Вместо этого используйте input type=text или, возможно, даже лучше, input type=password. Кроме того, я бы не стал слушать keypress - вместо этого используйте событие input.

0 голосов
/ 30 августа 2018

Это невозможно сделать с входом, для которого type установлено на number. Когда пользователь вводит число 0001, это фактически 1. Такие вещи, как PIN-коды, должны обрабатываться с type, установленным на text. Затем вы можете использовать регулярное выражение для проверки.

Чтобы разрешить ровно четыре цифры, не больше и не меньше, используйте следующее регулярное выражение:

^\d{4,4}$

Из JavaScript используйте это регулярное выражение для проверки строки, как показано ниже:

/^\d{4,4}$/.test('1234')
// => true

/^\d{4,4}$/.test('123456')
// => false

/^\d{4,4}$/.test('12')
// => false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...