如何覆盖角度类型=数字验证?

Lar*_*s J 7 forms validation angularjs

我正在撰写一份指令,以验证瑞典社会安全号码(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 is valid
          return true;
        }
        // it is invalid
        return false;
    };
    }
};
});
Run Code Online (Sandbox Code Playgroud)

我的例子http://plnkr.co/edit/OFYG06YEFwKg8zrLYVN1?p=preview的一个plunker

Zee*_*hah 0

您可以通过标记中的 novalidate 属性告诉 html 不要验证 html 表单。当您在 angularjs 中进行验证时,您不需要通过 HTML 再次验证它。

http://www.w3schools.com/tags/att_form_novalidate.asp

  • 我在表单标签上使用 novalidate 属性。但这没有帮助。 (2认同)