不同的 ng-pattern 行为

Different ng-pattern Behaviors

场景

我在一个项目中使用 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 的三种不同用法,其中只有文字正则表达式有效。如果有任何帮助,我将不胜感激。谢谢!

当你做 var c = /string/;您正在创建一个正则表达式文字。这不是在 JS 中创建正则表达式的唯一方法。就像您可以通过对象文字以外的其他方式创建对象。 RegExp 接受一个字符串和 returns 一个使用该字符串作为模式的正则表达式文字。

$scope.regex = new RegExp(string)

因此,如果我想使用连接字符串动态创建正则表达式。它看起来像这样。

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