2015-04-12 3 views
0

Я пытаюсь создать пользовательский валидатор, используя плагин Valdr AngularJs без каких-либо успехов.Building Valdr custom validator

То, что я хочу, чтобы архив является ввод текста, который должен получить формат даты и времени, как: дд/мм/гггг чч: мм (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" /> 

Bu t это не работает.

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

Спасибо!

ответ

0

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

ng-model="person.date_send" 

вместо

ng-model="date_send" 

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

+0

Спасибо, мой дорогой. Ваш пользовательский валидатор работает на 100%, но только для определенного значения. Когда я заменил в вашем случае Hanueli (ожидаемое значение) на регулярное выражение (например.^(([0-2] \ d | [3] [0-1]) \/([0] \ d | [1] [0-2]) \/[2] [0] \ d {2}) $ |^(([0-2] \ д | [3] [0-1]) \/([0] \ д | [1] [0-2]) \/[2] [0] \ d {2} \ с ([0-1] \ д | [2] [0-3]) \: [0-5] \ d \: [0-5] \ d) $), он не работает. – user3345942

1

Если вам нужно только регулярное выражение валидаторов, я рекомендовал бы использовать один предоставленный 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); 
    } 
    }; 
});