在我的應用程序的幾個地方,我必須驗證一個字段是一個有效的法語電話號碼。 像這樣:在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
?
在我的應用程序的幾個地方,我必須驗證一個字段是一個有效的法語電話號碼。 像這樣:在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
?
適應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 }}">
您可以定義常量像
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
。
只需在範圍上定義它並將其傳遞給它'ng-pattern =「pattern」' – 2014-12-03 11:15:38
@NewDev在我的情況下,輸入字段不屬於同一個控制器。是否可以使用「過濾器」或「服務」? – viebel 2014-12-03 11:20:39
然後一條指令是更好的方法。 – 2014-12-03 11:27:41