Выражение регулярного выражения из базы данных не работает в угловой директиве ng-pattern

У меня есть форма в угловом формате, в которой входные данные (имя, адрес электронной почты, номер телефона и т. Д.) Генерируются с использованием угловой директивы:

    .directive('camposProductos', function () {
return {
    restrict: 'AEC',
    template: '<div class="row" data-ng-class="{true: \'error\', false: \'good\'}[datosBaseForm.campo{{campo.id}}.$dirty && datosBaseForm.campo{{campo.id}}.$invalid]"> ' +
                    '<span class="fa fa-check" aria-hidden="true" data-ng-show="datosBaseForm.campo{{campo.id}}.$valid"></span>' +
                    '<label class="labelStyle col-md-4 col-sm-4 col-xs-12">{{campo.nombre}}:<span>*</span></label>' +
                    '<div class="col-md-7 col-sm-8 col-xs-12 noPaddingLat">' +
                        '<input class="inputBoxStyle" id="{{campo.id}}" data-ng-model="campo.Valor" data-ng-model-options="{ updateOn: \'blur\' }" name="campo{{campo.id}}" type="{{campo.tipo}}" required="" data-ng-pattern="{{campo.validacion}}" placeholder="{{campo.marcador}}">' +                            
                        '<div data-ng-show="datosBaseForm.$submitted || datosBaseForm.campo{{campo.id}}.$touched">' +
                            '<span data-ng-show="datosBaseForm.campo{{campo.id}}.$error.required" class="errorText">El {{campo.nombre}} es obligatorio.</span>' +
                            '<span data-ng-show="datosBaseForm.campo{{campo.id}}.$error.{{campo.tipo}}" class="errorText">Por favor introducir un {{campo.nombre}} valido.</span>' +
                        '</div>' +
                    '</div>' +
                '</div>',
    replace: true,
    transclude: true
};

});

Когда я ссылаюсь на выражение регулярного выражения для проверки входных данных: data-ng-pattern="{{campo.validacion}}", проверка работает, но angular выдает ошибку:

    angular.js:13920 Error: [$parse:lexerr] http://errors.angularjs.org/1.5.8/$parse/lexerr?p0=Unexpected%20nextharacter%20&p1=s%200-0%20%5B%5E%5D&p2=%5E((%5B%5E%3C%3E()%5C%5B%5C%5D%5C%5C.%2C%3B%3A%5Cs%40%22%5D%2B(%5C.%5B%5E%3C%3E()%5C%5B%5C%5D%5C%5C.%2C%3B%3A%5Cs%40%22%5D%2B)*)%7C(%22.%2B%22))%40((%5C%5B%5B0-9%5D%7B1%2C3%7D%5C.%5B0-9%5D%7B1%2C3%7D%5C.%5B0-9%5D%7B1%2C3%7D%5C.%5B0-9%5D%7B1%2C3%7D%5D)%7C((%5Ba-zA-Z%5C-0-9%5D%2B%5C.)%2B%5Ba-zA-Z%5D%7B2%2C%7D))%24

выражение в базе данных: ^(([^<>()[]\.,;:\s@"]+(.[^<>()[]\.,;:\s@"]+)*)|())@(([[0-9]{1,3} [0-9] {1,3} [0-9] {1,3} [ "+".... 0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[A-zA-Z]{2,}))$ это правильное выражение, когда я проверить это в https://www.debuggex.com/

Я видел, что для ng-pattern вам может понадобиться добавить "/" на каждом конце выражения, чтобы оно работало. когда я добавляю "/" к каждому концу выражения:

    $scope.FormatedRegex = '/' + campo.validacion + '/';

Угловая ошибка $parse:lexerr больше не появляется, но проверка больше не работает.

Моя форма проверяется корректно, когда я не форматирую выражение, но выдает ошибку в консоли для каждого поля в форме, которая требует проверки с помощью выражения регулярного выражения.

Как я могу сослаться на Регулярное выражение или отформатировать регулярное выражение, чтобы ошибка не выдавалась, а поля проверялись как положено?

1 ответ

Решение

Используйте обозначение конструктора регулярных выражений, чтобы построить из него объект регулярного выражения:

$scope.FormatedRegex = new RegExp(campo.validacion);

Это приведет к созданию объекта RegExp, который вы можете использовать в своем коде.

Чтобы получить базовый шаблон, вы можете использовать $scope.FormatedRegex.source,

Другие вопросы по тегам