Различное поведение ng-pattern [duplicate]

0

сценарий

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

Проблема

Я знаю, что этот код работает:

//JavaScript
$scope.regex = /[^0-9\|]+/;

//HTML
<input type="text" name="first" ng-model="a" ng-pattern="regex">

Но мне нужно иметь возможность использовать такую строку:

//JavaScript
$scope.regex = "[^0-9\|]+";

//HTML
<input type="text" name="first" ng-model="a" ng-pattern="{{regex}}">

Вопрос

Как я могу использовать динамически генерируемое строковое регулярное выражение с ng-pattern?

Plunker

Я подготовил плункер, демонстрирующий три разных применения ng-pattern в которых работает только буквальное регулярное выражение. Я был бы так благодарен за любую помощь. Благодарю!

Теги:
ng-pattern

1 ответ

0

Когда вы выполняете var c =/string/; Вы создаете литерал регулярного выражения. Это не единственный способ создать регулярное выражение в JS. Подобно тому, как вы можете создавать объекты другими способами, кроме объектных литералов. RegExp принимает строку и возвращает литерал регулярного выражения, используя эту строку в качестве шаблона.

$scope.regex = new RegExp(string)

Поэтому, если бы я хотел динамически создать регулярное выражение, используя конкатенированные строки. Это было бы похоже на что-то подобное.

var something = "a";
something += "|b"
$scope.regex = new RegExp(something);
// $scope.regex == /a|b/  

Ещё вопросы

Сообщество Overcoder
Наверх
Меню