我正在撰写一份指令,以验证瑞典社会安全号码(personnummer).要在这样的输入元素上使用:
<input type="text" ng-model="pnr" pnrvalidator />
Run Code Online (Sandbox Code Playgroud)
瑞典社会安全号码的格式为yyyymmdd-nnnn例如19121212-1212
只要我使用,我的指令就可以使用type="text".但由于我希望在移动浏览器上使用数字键盘,然后我改为type="number":
<input type="number" ng-model="pnr" pnrvalidator />
Run Code Online (Sandbox Code Playgroud)
然后我的验证器只有在我的输入中没有输入破折号( - )时才有效,例如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 …Run Code Online (Sandbox Code Playgroud)