Сборка 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"
Для справки, пожалуйста, взгляните на демонстрационную версию пользовательского валидатора. Всегда полезно, если вы можете предоставить плунжеру полный образец.