不同的ng模式行为

时间:2015-06-26 23:37:19

标签: javascript regex angularjs ng-pattern

方案

我在项目中使用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

我已准备好plunker,展示ng-pattern的三种不同用法,其中只有文字正则表达式有效。我会非常感激任何帮助。谢谢!

1 个答案:

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