2015-04-12 90 views
0

我一直在尝试使用Valdr AngularJs插件建立一个自定义验证器,但没有成功。建设Valdr自定义验证器

我希望存档是应该接收的日期和时间格式等的输入文字:DD/MM/YYYY HH:MM(2015年12月4日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" /> 

卜它不起作用。

我会很感激任何帮助。

谢谢!

回答

0

我不能100%肯定,因为你没有提供足够的代码,但我猜你的输入字段声明应该是

ng-model="person.date_send" 

而不是

ng-model="date_send" 

仅供参考,请有看看custom validator demo。如果您可以提供plunker一个完整的样本,这总是有帮助的。

+0

谢谢你亲爱的。您的自定义验证工作100%,但仅限于特定的值。当我用正则表达式(例如^(([0-2] \ d | [3] [0-1])\ /([0] \ d | [1])代替Hanueli(期望值) [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)$),它不起作用。 – 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); 
    } 
    }; 
});