在AngularJS中,如何编写可重用的ng模式?

时间:2014-12-03 11:13:02

标签: angularjs

在我的应用程序的几个地方,我必须验证字段是有效的法语电话号码。 像这样:

<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 个答案:

答案 0 :(得分: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 :(得分: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