2014-12-03 73 views
1

在我的應用程序的幾個地方,我必須驗證一個字段是一個有效的法語電話號碼。 像這樣:在AngularJS中,如何編寫可重用的ng模式?

<input type="text" ng-pattern="/^0[1-6]{1}((([0-9]{2}){4})|((\s[0-9]{2}){4})|((-[0-9]{2}){4}))$/">

  • 我怎麼能做出/正則表達式,而不復制我的應用程序由幾個輸入字段重複使用粘貼regex

  • 我怎樣才能本地化regex

+2

只需在範圍上定義它並將其傳遞給它'ng-pattern =「pattern」' – 2014-12-03 11:15:38

+0

@NewDev在我的情況下,輸入字段不屬於同一個控制器。是否可以使用「過濾器」或「服務」? – viebel 2014-12-03 11:20:39

+0

然後一條指令是更好的方法。 – 2014-12-03 11:27:41

回答

2

適應ngPattern指令:

.directive("customPhonePattern", function() { 
    return { 
     restrict: 'A', 
     require: '?ngModel', 
     link: function (scope, elm, attr, ctrl) { 
      if (!ctrl) return; 

      var patternExp = "/^0[1-6]{1}((([0-9]{2}){4})|((\s[0-9]{2}){4})|((-[0-9]{2}){4}))$/"; 

      attr.$observe('customPhonePattern', function (locale) { 
       switch (locale) { 
        case "EN": 
         patternExp = ""; 
         break; 
        case "DE": 
         patternExp = ""; 
         break; 
       } 

       var regexp = new RegExp(patternExp); 

       ctrl.$validate(); 
      }); 

      ctrl.$validators.pattern = function (value) { 
       return ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value); 
      }; 
     } 
    }; 
}) 

使用

<input type="text" custom-pattern="FR"> 

<input type="text" custom-pattern="{{ someValue }}"> 
1

您可以定義常量像

var config = { 
    patternLong: "/^0[1-6]{1}((([0-9]{2}){4})|((\s[0-9]{2}){4})|((-[0-9]{2}){4}))$/", 
    patternShort: "/^[a-zA-Z0-9_.,-]*$/" 
}; 

angular.module('myApp').value('config', config); 

注入這config在控制器中在哪裏你需要,並使用像config.patternLong