@@ -19,7 +19,74 @@ var requiredDirective = function() {
19
19
} ;
20
20
} ;
21
21
22
+ /**
23
+ * @ngdoc directive
24
+ * @name ngPattern
25
+ *
26
+ * @description
27
+ *
28
+ * ngPattern adds the pattern {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}.
29
+ * It is most often used for text-based [@link input `input`} controls, but can also be applied to custom text-based controls.
30
+ *
31
+ * The validator sets the `pattern` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`}
32
+ * does not match a RegExp which is obtained by evaluating the Angular expression given in the
33
+ * `ngPattern` attribute value:
34
+ * * If the expression evaluates to a RegExp object, then this is used directly.
35
+ * * If the expression evaluates to a string, then it will be converted to a RegExp after wrapping it
36
+ * in `^` and `$` characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
37
+ *
38
+ * <div class="alert alert-info">
39
+ * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
40
+ * start at the index of the last search's match, thus not taking the whole input value into
41
+ * account.
42
+ * </div>
43
+ *
44
+ * <div class="alert alert-info">
45
+ * **Note:** This directive is also added when the plain `pattern` attribute is used, with two
46
+ * differences:
47
+ * 1. `ngPattern` does not set the `pattern` attribute and therefore not HTML5 constraint validation
48
+ * is available.
49
+ * 2. The `ngPattern` attribute must be an expression, while the `pattern` value must be interpolated
50
+ * </div>
51
+ *
52
+ * @example
53
+ * <example name="ngPatternDirective" module="ngPatternExample">
54
+ * <file name="index.html">
55
+ * <script>
56
+ * angular.module('ngPatternExample', [])
57
+ * .controller('ExampleController', ['$scope', function($scope) {
58
+ * $scope.regex = '\\d+';
59
+ * }]);
60
+ * </script>
61
+ * <div ng-controller="ExampleController">
62
+ * <form name="form">
63
+ * <label for="regex">Set a pattern (regex string): </label>
64
+ * <input type="text" ng-model="regex" id="regex" />
65
+ * <br>
66
+ * <label for="input">This input is restricted by the current pattern: </label>
67
+ * <input type="text" ng-model="model" id="input" name="input" ng-pattern="regex" /><br>
68
+ * <hr>
69
+ * input valid? = <code>{{form.input.$valid}}</code><br>
70
+ * model = <code>{{model}}</code>
71
+ * </form>
72
+ * </div>
73
+ * </file>
74
+ * <file name="protractor.js" type="protractor">
75
+ var model = element(by.binding('model'));
76
+ var input = element(by.id('input'));
22
77
78
+ it('should validate the input with the default pattern', function() {
79
+ input.sendKeys('aaa');
80
+ expect(model.getText()).not.toContain('aaa');
81
+
82
+ input.clear().then(function() {
83
+ input.sendKeys('123');
84
+ expect(model.getText()).toContain('123');
85
+ });
86
+ });
87
+ * </file>
88
+ * </example>
89
+ */
23
90
var patternDirective = function ( ) {
24
91
return {
25
92
restrict : 'A' ,
@@ -51,7 +118,65 @@ var patternDirective = function() {
51
118
} ;
52
119
} ;
53
120
121
+ /**
122
+ * @ngdoc directive
123
+ * @name ngMaxlength
124
+ *
125
+ * @description
126
+ *
127
+ * ngMaxlength adds the maxlength {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}.
128
+ * It is most often used for text-based [@link input `input`} controls, but can also be applied to custom text-based controls.
129
+ *
130
+ * The validator sets the `maxlength` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`}
131
+ * is longer than the integer obtained by evaluating the Angular expression given in the
132
+ * `ngMaxlength` attribute value.
133
+ *
134
+ * <div class="alert alert-info">
135
+ * **Note:** This directive is also added when the plain `maxlength` attribute is used, with two
136
+ * differences:
137
+ * 1. `ngMaxlength` does not set the `maxlength` attribute and therefore not HTML5 constraint validation
138
+ * is available.
139
+ * 2. The `ngMaxlength` attribute must be an expression, while the `maxlength` value must be interpolated
140
+ * </div>
141
+ *
142
+ * @example
143
+ * <example name="ngMaxlengthDirective" module="ngMaxlengthExample">
144
+ * <file name="index.html">
145
+ * <script>
146
+ * angular.module('ngMaxlengthExample', [])
147
+ * .controller('ExampleController', ['$scope', function($scope) {
148
+ * $scope.maxlength = 5;
149
+ * }]);
150
+ * </script>
151
+ * <div ng-controller="ExampleController">
152
+ * <form name="form">
153
+ * <label for="maxlength">Set a maxlength: </label>
154
+ * <input type="number" ng-model="maxlength" id="maxlength" />
155
+ * <br>
156
+ * <label for="input">This input is restricted by the current maxlength: </label>
157
+ * <input type="text" ng-model="model" id="input" name="input" ng-maxlength="maxlength" /><br>
158
+ * <hr>
159
+ * input valid? = <code>{{form.input.$valid}}</code><br>
160
+ * model = <code>{{model}}</code>
161
+ * </form>
162
+ * </div>
163
+ * </file>
164
+ * <file name="protractor.js" type="protractor">
165
+ * var model = element(by.binding('model'));
166
+ var input = element(by.id('input'));
167
+
168
+ it('should validate the input with the default maxlength', function() {
169
+ input.sendKeys('abcdef');
170
+ expect(model.getText()).not.toContain('abcdef');
54
171
172
+ input.clear().then(function() {
173
+ input.sendKeys('abcde');
174
+ expect(model.getText()).toContain('abcde');
175
+ });
176
+ });
177
+ * </file>
178
+ * </example>
179
+ */
55
180
var maxlengthDirective = function ( ) {
56
181
return {
57
182
restrict : 'A' ,
@@ -72,6 +197,62 @@ var maxlengthDirective = function() {
72
197
} ;
73
198
} ;
74
199
200
+ /**
201
+ * @ngdoc directive
202
+ * @name ngMinlength
203
+ *
204
+ * @description
205
+ *
206
+ * ngMinlength adds the minlength {@link ngModel.NgModelController#$validators `validator`} to {@link ngModel `ngModel`}.
207
+ * It is most often used for text-based [@link input `input`} controls, but can also be applied to custom text-based controls.
208
+ *
209
+ * The validator sets the `minlength` error key if the {@link ngModel.NgModelController#$viewValue `ngModel.$viewValue`}
210
+ * is shorter than the integer obtained by evaluating the Angular expression given in the
211
+ * `ngMinlength` attribute value.
212
+ *
213
+ * <div class="alert alert-info">
214
+ * **Note:** This directive is also added when the plain `minlength` attribute is used, with two
215
+ * differences:
216
+ * 1. `ngMinlength` does not set the `minlength` attribute and therefore not HTML5 constraint validation
217
+ * is available.
218
+ * 2. The `ngMinlength` value must be an expression, while the `minlength` value must be interpolated
219
+ * </div>
220
+ *
221
+ * @example
222
+ * <example name="ngMinlengthDirective" module="ngMinlengthExample">
223
+ * <file name="index.html">
224
+ * <script>
225
+ * angular.module('ngMinlengthExample', [])
226
+ * .controller('ExampleController', ['$scope', function($scope) {
227
+ * $scope.minlength = 3;
228
+ * }]);
229
+ * </script>
230
+ * <div ng-controller="ExampleController">
231
+ * <form name="form">
232
+ * <label for="minlength">Set a minlength: </label>
233
+ * <input type="number" ng-model="minlength" id="minlength" />
234
+ * <br>
235
+ * <label for="input">This input is restricted by the current minlength: </label>
236
+ * <input type="text" ng-model="model" id="input" name="input" ng-minlength="minlength" /><br>
237
+ * <hr>
238
+ * input valid? = <code>{{form.input.$valid}}</code><br>
239
+ * model = <code>{{model}}</code>
240
+ * </form>
241
+ * </div>
242
+ * </file>
243
+ * <file name="protractor.js" type="protractor">
244
+ * var model = element(by.binding('model'));
245
+ *
246
+ * it('should validate the input with the default minlength', function() {
247
+ * element(by.id('input')).sendKeys('ab');
248
+ * expect(model.getText()).not.toContain('ab');
249
+ *
250
+ * element(by.id('input')).sendKeys('abc');
251
+ * expect(model.getText()).toContain('abc');
252
+ * });
253
+ * </file>
254
+ * </example>
255
+ */
75
256
var minlengthDirective = function ( ) {
76
257
return {
77
258
restrict : 'A' ,
0 commit comments