Сборка Valdr Custom Validator

С тех пор я пытался создать собственный валидатор с использованием плагина Valdr AngularJs, но безуспешно.

Я хочу заархивировать вводимый текст, который должен получить формат даты и времени, например: дд / мм / гггг чч: мм (12/04/2015 12:32:10)

Основываясь на документации Valdr, это то, что я сделал до сих пор:


myApp.factory('customValidator', function () {
  return {
    name: 'customValidator', // this is the validator name that can be referenced from the constraints JSON
    validate: function (value, arguments) {
       // value: the value to validate
      // arguments: the validator arguments
      return value === arguments.onlyValidValue;
    }
  };
});

myApp.config(function(valdrProvider)
    {
        valdrProvider.addValidator('customValidator');
        valdrProvider.addConstraints(
            {
                'Person':
                {
                    'date_send':
                    {
                        'customValidator':
                        {
                            'onlyValidValue':'^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2})$|^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2}\s([0-1]\d|[2][0-3])\:[0-5]\d\:[0-5]\d)$',
                            'message': 'Please date and time format has to be : 12/04/2015 12:32:10'
                        }
                    }
                }
            });
    });

Тогда в моей форме, у меня есть следующее:

<input class="input" name="date_send" id="date_send" type="text" ng-model="date_send" />

Но это не работает.

Я буду признателен за любую помощь.

Спасибо!

2 ответа

Если вам нужен только валидатор регулярных выражений, я бы рекомендовал использовать тот, что предоставлен valdr, вместо написания собственного валидатора:

valdrProvider.addConstraints({
    'Person': {
      'date_send': {
        'pattern': {
            'value': '^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2})$|^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2}\s([0-1]\d|[2][0-3])\:[0-5]\d\:[0-5]\d)$',
            'message': 'Please date and time format has to be : 12/04/2015 12:32:10'
        }
      }
    }
  });

Если вам нужен собственный валидатор, вы должны реализовать логику валидации в валидаторе. Вы только что скопировали образец валидатора из документов, который сравнивает только вводимое пользователем значение с "onlyValidValue", настроенным в ограничениях. То, что вы хотите сделать, это больше похоже на:

valdrProvider.addConstraints({
    'Person': {
      'date_send': {
        'customDateValidator': {
            'message': 'Please date and time format has to be : 12/04/2015 12:32:10'
        }
      }
    }
  });

Пользовательский валидатор:

myApp.factory('customDateValidator', function () {
  return {
    name: 'customDateValidator', 
    validate: function (value, arguments) {
      var dateCheck = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2})$|^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[2][0]\d{2}\s([0-1]\d|[2][0-3])\:[0-5]\d\:[0-5]\d)$/
      return dateCheck.test(value);
    }
  };
});

Я не могу быть уверен на 100%, потому что вы не предоставили достаточно кода, но я думаю, что ваше поле ввода должно быть

ng-model="person.date_send"

скорее, чем

ng-model="date_send"

Для справки, пожалуйста, взгляните на демонстрационную версию пользовательского валидатора. Всегда полезно, если вы можете предоставить плунжеру полный образец.

Другие вопросы по тегам