我正在撰写一份指令,以验证瑞典社会安全号码(personnummer).要在这样的输入元素上使用:
<input type="text" ng-model="pnr" pnrvalidator />
瑞典社会安全号码的格式为yyyymmdd-nnnn,例如19121212-1212
只要我使用type =“text”,我的指令就可以工作.但是因为我想在移动浏览器上使用数字键盘,
然后我改为type =“number”:
<input type="number" ng-model="pnr" pnrvalidator />
然后我的验证器只有在我的输入中没有输入破折号( – )时才有效,例如191212121212.如果我输入19121212-1212那么它不是有效数字.
并且ng-invalid ng-invalid-number类被添加到我的input元素中
当我编写指令时,我遵循了文档如何修改内置验证器https://docs.angularjs.org/guide/forms
但它似乎不适用于type = number验证,还是我错过了什么?
我使用角度1.3(和1.4).
我的指令代码:
angular.module('example').directive('pnrvalidator',function(){ return { require: 'ngModel',link: function(scope,elm,attrs,ctrl) { var validatePnr = function(inputString){ /* * My validation logic here. Removed for this example */ }; ctrl.$validators.number = function(modelValue,viewValue) { if (ctrl.$isEmpty(modelValue)) { // consider empty models to be valid return true; } if (validatePnr(viewValue)) { // it is valid return true; } // it is invalid return false; }; } }; });
我的例子http://plnkr.co/edit/OFYG06YEFwKg8zrLYVN1?p=preview的一个plunker