2016-12-07 15 views
0

我有我的AngularJS正則表達式有點問題

我在HTML正則表達式如下:

ng-pattern="[adfijmPrsyz\d]+" 

但我在控制檯中的錯誤,說:

angular.js:13920 Error: [$parse:lexerr] Lexer Error: Unexpected next character at columns 12-12 [\] in expression [[adfijmPrsyz\d]+]. 

我正則表達式應該做到這一點:只有一個,d,F,I,J,M,P,R,S,Y,Z和數字0到9應該是有效的。

這將是很好,如果我可以在控制器中設置正則表達式,而不是硬編碼在HTML文件中。

這樣的:

private regex: any = /[adfijmPrsyz\d+]/;

<input name="REFZEILE" ng-pattern="regex" />

+1

嘗試使用一個正則表達式的文字符號以ng圖案與'[0-9]',以查看是否有任何差異 - 'NG-圖案=「/^[adfijmPrsyz0-9 ] + $ /「'。有關如何在控制器中設置正則表達式的示例,請參見[this plunkr](https://plnkr.co/edit/6h9rSEcvEQEWvRoMY1cd?p=preview)('$ scope.regex ='[adfijmPrsyz \\ d] + 「;')。 –

+0

'ngPattern'需要一個範圍變量,而不是一個字符串。 – zeroflagL

+0

@zeroflagL'ngPattern'同時接受這兩個字符串,但是當使用字符串時,必須將其用引號括起來,就像任何其他時間向Angular指令提供字符串一樣。 – Lex

回答

0

實際上,你可以定義你的控制器的正則表達式 - 你只需要使用new RegExp()。當使用內聯正則表達式時,必須通過將其引用到引號中來告訴Angular它是一個字符串(因爲您在屬性值上使用雙引號引起的情況下,單引號),否則Angular會嘗試將其評估爲變量。這是一個工作示例,顯示了這兩種方法的實際應用。

angular.module('app', ['ngMessages']) 
 
    .controller('ctrl', function($scope) { 
 
    $scope.regex = new RegExp(/^[adfijmPrsyz\d]+$/); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-messages/1.5.9/angular-messages.min.js"></script> 
 
<div ng-app="app" ng-controller="ctrl"> 
 
    <form name="testForm"> 
 
    Using controller RegExp: 
 
    <input type="text" name="testInput" ng-model="testInput" ng-pattern="regex" required> 
 
    <div ng-messages="testForm.testInput.$error" role="alert"> 
 
     <div ng-message="required">A value is required</div> 
 
     <div ng-message="pattern">Value entered is not valid</div> 
 
    </div> 
 
    Using inline RegExp: 
 
    <input type="text" name="testInput2" ng-model="testInput2" ng-pattern="'[adfijmPrsyz\d]+'" required> 
 
    <div ng-messages="testForm.testInput2.$error" role="alert"> 
 
     <div ng-message="required">A value is required</div> 
 
     <div ng-message="pattern">Value entered is not valid</div> 
 
    </div> 
 
    </form> 
 
</div>

+0

不需要新的RegExp()。 '/.../'已經**是** RegExp。 – zeroflagL