7
7
* @package Noname\Common
8
8
* @since 0.2.0
9
9
*
10
- * @method static bool is(string $type, mixed $value) Checks if value passes as type
11
- * @method static bool isNull(mixed $value) Checks if value is null
12
- * @method static bool isBool(mixed $value) Checks if value is boolean
13
- * @method static bool isBoolean(mixed $value) Checks if value is boolean
14
- * @method static bool isScalar(mixed $value) Checks if value is scalar
15
- * @method static bool isStr(mixed $value) Checks if value is string
16
- * @method static bool isString(mixed $value) Checks if value is string
17
- * @method static bool isInt(mixed $value) Checks if value is integer
18
- * @method static bool isInteger(mixed $value) Checks if value is integer
19
- * @method static bool isNum(mixed $value) Checks if value is numeric
20
- * @method static bool isNumeric(mixed $value) Checks if value is numeric
21
- * @method static bool isFloat(mixed $value) Checks if value is float
22
- * @method static bool isDouble(mixed $value) Checks if value is double
23
- * @method static bool isAlNum(mixed $value) Checks if value contains only alpha-numeric characters
24
- * @method static bool isAlphaNumeric(mixed $value) Checks if value contains only alpha-numeric characters
25
- * @method static bool isAlpha(mixed $value) Checks if value contains only alpha characters
26
- * @method static bool isArr(mixed $value) Checks if value is an array
27
- * @method static bool isArray(mixed $value) Checks if value is an array
28
- * @method static bool isObj(mixed $value) Checks if value is an object
29
- * @method static bool isObject(mixed $value) Checks if value is an object
30
- * @method static bool isClosure(mixed $value) Checks if value is instance of \Closure
31
- * @method static bool isCallable(mixed $value) Checks if value is callable
32
- * @method static bool isEmail(mixed $value) Checks if value is valid email address
33
- * @method static bool isIP(mixed $value) Checks if value is valid IPv4 or IPv6
34
- * @method static bool isIPv4(mixed $value) Checks if value is valid IPv4
35
- * @method static bool isIPv6(mixed $value) Checks if value is valid IPv6
36
- * @method static bool isDate(mixed $value) Checks if value is date/datetime
37
- * @method static bool isDateTime(mixed $value) Checks if value is date/datetime
10
+ * @method static bool is(string $type, mixed $value, array $rule = [] ) Checks if value passes as type
11
+ * @method static bool isNull(mixed $value, array $rule = [] ) Checks if value is null
12
+ * @method static bool isBool(mixed $value, array $rule = [] ) Checks if value is boolean
13
+ * @method static bool isBoolean(mixed $value, array $rule = [] ) Checks if value is boolean
14
+ * @method static bool isScalar(mixed $value, array $rule = [] ) Checks if value is scalar
15
+ * @method static bool isStr(mixed $value, array $rule = [] ) Checks if value is string
16
+ * @method static bool isString(mixed $value, array $rule = [] ) Checks if value is string
17
+ * @method static bool isInt(mixed $value, array $rule = [] ) Checks if value is integer
18
+ * @method static bool isInteger(mixed $value, array $rule = [] ) Checks if value is integer
19
+ * @method static bool isNum(mixed $value, array $rule = [] ) Checks if value is numeric
20
+ * @method static bool isNumeric(mixed $value, array $rule = [] ) Checks if value is numeric
21
+ * @method static bool isFloat(mixed $value, array $rule = [] ) Checks if value is float
22
+ * @method static bool isDouble(mixed $value, array $rule = [] ) Checks if value is double
23
+ * @method static bool isAlNum(mixed $value, array $rule = [] ) Checks if value contains only alpha-numeric characters
24
+ * @method static bool isAlphaNumeric(mixed $value, array $rule = [] ) Checks if value contains only alpha-numeric characters
25
+ * @method static bool isAlpha(mixed $value, array $rule = [] ) Checks if value contains only alpha characters
26
+ * @method static bool isArr(mixed $value, array $rule = [] ) Checks if value is an array
27
+ * @method static bool isArray(mixed $value, array $rule = [] ) Checks if value is an array
28
+ * @method static bool isObj(mixed $value, array $rule = [] ) Checks if value is an object
29
+ * @method static bool isObject(mixed $value, array $rule = [] ) Checks if value is an object
30
+ * @method static bool isClosure(mixed $value, array $rule = [] ) Checks if value is instance of \Closure
31
+ * @method static bool isCallable(mixed $value, array $rule = [] ) Checks if value is callable
32
+ * @method static bool isEmail(mixed $value, array $rule = [] ) Checks if value is valid email address
33
+ * @method static bool isIP(mixed $value, array $rule = [] ) Checks if value is valid IPv4 or IPv6
34
+ * @method static bool isIPv4(mixed $value, array $rule = [] ) Checks if value is valid IPv4
35
+ * @method static bool isIPv6(mixed $value, array $rule = [] ) Checks if value is valid IPv6
36
+ * @method static bool isDate(mixed $value, array $rule = [] ) Checks if value is date/datetime
37
+ * @method static bool isDateTime(mixed $value, array $rule = [] ) Checks if value is date/datetime
38
38
*/
39
39
class Validator
40
40
{
@@ -118,18 +118,28 @@ public static function __callStatic($method, $arguments)
118
118
$ func = array_shift ($ parts );
119
119
$ numArgs = count ($ arguments );
120
120
121
- if ($ func == 'is ' ){
122
- if (empty ($ parts )){
123
- // Handle call to Validator::is($type, $value)
124
- if ($ numArgs == 2 ){
125
- list ($ type , $ value ) = $ arguments ;
126
- return (new self ())->validateType ($ type , $ value );
121
+ if ($ func == 'is ' ) {
122
+ if (empty ($ parts )) {
123
+ // Handle call to Validator::is($type, $value [, $rule])
124
+ if (in_array ($ numArgs , [2 , 3 ])) {
125
+ if ($ numArgs == 3 ) {
126
+ list ($ type , $ value , $ rule ) = $ arguments ;
127
+ if (!is_array ($ rule )) {
128
+ $ rule = [];
129
+ }
130
+ } else {
131
+ $ rule = [];
132
+ list ($ type , $ value ) = $ arguments ;
133
+ }
134
+ return (new self ())->validateType ($ type , $ value , $ rule );
127
135
}
128
- throw new \InvalidArgumentException ("Validator::is() expects exactly 2 parameters, $ numArgs parameters were given. " );
129
- }else {
130
- // Handle call to Validator::is{Type}($value)
136
+ throw new \InvalidArgumentException ("Validator::is() expects 2 or 3 parameters, $ numArgs parameters were given. " );
137
+ } else {
138
+ // Handle call to Validator::is{Type}($value [, $rule] )
131
139
$ type = implode ('' , $ parts );
132
- return (new self ())->validateType ($ type , $ arguments [0 ]);
140
+ $ value = $ arguments [0 ];
141
+ $ rule = isset ($ arguments [1 ]) && is_array ($ arguments [1 ]) ? $ arguments [1 ] : [];
142
+ return (new self ())->validateType ($ type , $ value , $ rule );
133
143
}
134
144
}
135
145
@@ -144,24 +154,24 @@ public static function __callStatic($method, $arguments)
144
154
*/
145
155
public function validate () : bool
146
156
{
147
- if (!empty ($ this ->rules )){
148
- foreach ($ this ->rules as $ name => $ rule ){
149
- if (array_key_exists ($ name , $ this ->values ->toArray ())){
150
- if (is_string ($ rule )){
157
+ if (!empty ($ this ->rules )) {
158
+ foreach ($ this ->rules as $ name => $ rule ) {
159
+ if (array_key_exists ($ name , $ this ->values ->toArray ())) {
160
+ if (is_string ($ rule )) {
151
161
// Rebuild $rule into proper format
152
162
// e.g. 'email' -> ['type' => 'email']
153
163
$ rule = ['type ' => $ rule ];
154
164
}
155
- if (isset ($ rule ['type ' ])){
156
- if (!$ this ->validateType ($ rule ['type ' ], $ this ->values [$ name ], $ rule )){
165
+ if (isset ($ rule ['type ' ])) {
166
+ if (!$ this ->validateType ($ rule ['type ' ], $ this ->values [$ name ], $ rule )) {
157
167
// Error: Value for '%s' is invalid
158
168
$ this ->setError ($ name , "Value for ' $ name' is invalid. Expected {$ rule ['type ' ]}. " );
159
169
}
160
- }else {
170
+ } else {
161
171
throw new \InvalidArgumentException ("Invalid rule for ' $ name' " );
162
172
}
163
- }else {
164
- if (isset ($ rule ['required ' ]) && $ rule ['required ' ]){
173
+ } else {
174
+ if (isset ($ rule ['required ' ]) && $ rule ['required ' ]) {
165
175
// Error: Value for '%s' is required
166
176
$ this ->setError ($ name , "Value for ' $ name' is required " );
167
177
}
@@ -180,9 +190,9 @@ public function validate() : bool
180
190
*/
181
191
public function setError ($ name , $ error )
182
192
{
183
- if ($ this ->errors ->has ($ name )){
193
+ if ($ this ->errors ->has ($ name )) {
184
194
$ errors = $ this ->errors ->get ($ name );
185
- }else {
195
+ } else {
186
196
$ errors = [];
187
197
}
188
198
$ errors [] = $ error ;
@@ -223,9 +233,9 @@ public function hasErrors() : bool
223
233
public function validateType ($ type , $ value , array $ rule = []) : bool
224
234
{
225
235
$ type = strtolower ($ type );
226
- if (isset ($ this ->validateTypeMethodMap [$ type ])){
236
+ if (isset ($ this ->validateTypeMethodMap [$ type ])) {
227
237
return $ this ->{$ this ->validateTypeMethodMap [$ type ]}($ value , $ rule );
228
- }else {
238
+ } else {
229
239
throw new \InvalidArgumentException ("Type ' $ type' is not a valid rule type " );
230
240
}
231
241
}
@@ -237,7 +247,7 @@ public function validateType($type, $value, array $rule = []) : bool
237
247
* @param array $rule
238
248
* @return bool
239
249
*/
240
- private function validateNull ($ value , array $ rule ) : bool
250
+ private function validateNull ($ value , array $ rule = [] ) : bool
241
251
{
242
252
return is_null ($ value );
243
253
}
@@ -249,7 +259,7 @@ private function validateNull($value, array $rule) : bool
249
259
* @param array $rule
250
260
* @return bool
251
261
*/
252
- private function validateBoolean ($ value , array $ rule ) : bool
262
+ private function validateBoolean ($ value , array $ rule = [] ) : bool
253
263
{
254
264
return is_bool ($ value );
255
265
}
@@ -261,7 +271,7 @@ private function validateBoolean($value, array $rule) : bool
261
271
* @param array $rule
262
272
* @return bool
263
273
*/
264
- private function validateScalar ($ value , array $ rule ) : bool
274
+ private function validateScalar ($ value , array $ rule = [] ) : bool
265
275
{
266
276
return is_scalar ($ value );
267
277
}
@@ -273,7 +283,7 @@ private function validateScalar($value, array $rule) : bool
273
283
* @param array $rule
274
284
* @return bool
275
285
*/
276
- private function validateArray ($ value , array $ rule ) : bool
286
+ private function validateArray ($ value , array $ rule = [] ) : bool
277
287
{
278
288
return is_array ($ value );
279
289
}
@@ -285,7 +295,7 @@ private function validateArray($value, array $rule) : bool
285
295
* @param array $rule
286
296
* @return bool
287
297
*/
288
- private function validateObject ($ value , array $ rule ) : bool
298
+ private function validateObject ($ value , array $ rule = [] ) : bool
289
299
{
290
300
return is_object ($ value );
291
301
}
@@ -297,7 +307,7 @@ private function validateObject($value, array $rule) : bool
297
307
* @param array $rule
298
308
* @return bool
299
309
*/
300
- private function validateString ($ value , array $ rule ) : bool
310
+ private function validateString ($ value , array $ rule = [] ) : bool
301
311
{
302
312
return is_string ($ value );
303
313
}
@@ -309,7 +319,7 @@ private function validateString($value, array $rule) : bool
309
319
* @param array $rule
310
320
* @return bool
311
321
*/
312
- private function validateInteger ($ value , array $ rule ) : bool
322
+ private function validateInteger ($ value , array $ rule = [] ) : bool
313
323
{
314
324
return is_int ($ value );
315
325
}
@@ -321,7 +331,7 @@ private function validateInteger($value, array $rule) : bool
321
331
* @param array $rule
322
332
* @return bool
323
333
*/
324
- private function validateNumeric ($ value , array $ rule ) : bool
334
+ private function validateNumeric ($ value , array $ rule = [] ) : bool
325
335
{
326
336
return is_numeric ($ value );
327
337
}
@@ -333,7 +343,7 @@ private function validateNumeric($value, array $rule) : bool
333
343
* @param array $rule
334
344
* @return bool
335
345
*/
336
- private function validateFloat ($ value , array $ rule ) : bool
346
+ private function validateFloat ($ value , array $ rule = [] ) : bool
337
347
{
338
348
return is_float ($ value );
339
349
}
@@ -345,7 +355,7 @@ private function validateFloat($value, array $rule) : bool
345
355
* @param array $rule
346
356
* @return bool
347
357
*/
348
- private function validateAlphaNumeric ($ value , array $ rule ) : bool
358
+ private function validateAlphaNumeric ($ value , array $ rule = [] ) : bool
349
359
{
350
360
return is_string ($ value ) && ctype_alnum ($ value );
351
361
}
@@ -357,7 +367,7 @@ private function validateAlphaNumeric($value, array $rule) : bool
357
367
* @param array $rule
358
368
* @return bool
359
369
*/
360
- private function validateAlpha ($ value , array $ rule ) : bool
370
+ private function validateAlpha ($ value , array $ rule = [] ) : bool
361
371
{
362
372
return is_string ($ value ) && ctype_alpha ($ value );
363
373
}
@@ -369,7 +379,7 @@ private function validateAlpha($value, array $rule) : bool
369
379
* @param array $rule
370
380
* @return bool
371
381
*/
372
- private function validateEmail ($ value , array $ rule ) : bool
382
+ private function validateEmail ($ value , array $ rule = [] ) : bool
373
383
{
374
384
return (bool ) filter_var ($ value , FILTER_VALIDATE_EMAIL );
375
385
}
@@ -381,7 +391,7 @@ private function validateEmail($value, array $rule) : bool
381
391
* @param array $rule
382
392
* @return bool
383
393
*/
384
- private function validateIP ($ value , array $ rule ) : bool
394
+ private function validateIP ($ value , array $ rule = [] ) : bool
385
395
{
386
396
return $ this ->validateIPv4 ($ value , $ rule ) || $ this ->validateIPv6 ($ value , $ rule );
387
397
}
@@ -393,7 +403,7 @@ private function validateIP($value, array $rule) : bool
393
403
* @param array $rule
394
404
* @return bool
395
405
*/
396
- private function validateIPv4 ($ value , array $ rule ) : bool
406
+ private function validateIPv4 ($ value , array $ rule = [] ) : bool
397
407
{
398
408
return (bool ) filter_var ($ value , FILTER_VALIDATE_IP , FILTER_FLAG_IPV4 );
399
409
}
@@ -405,7 +415,7 @@ private function validateIPv4($value, array $rule) : bool
405
415
* @param array $rule
406
416
* @return bool
407
417
*/
408
- private function validateIPv6 ($ value , array $ rule ) : bool
418
+ private function validateIPv6 ($ value , array $ rule = [] ) : bool
409
419
{
410
420
return (bool ) filter_var ($ value , FILTER_VALIDATE_IP , FILTER_FLAG_IPV6 );
411
421
}
@@ -417,7 +427,7 @@ private function validateIPv6($value, array $rule) : bool
417
427
* @param array $rule
418
428
* @return bool
419
429
*/
420
- private function validateClosure ($ value , array $ rule ) : bool
430
+ private function validateClosure ($ value , array $ rule = [] ) : bool
421
431
{
422
432
return ($ value instanceof \Closure);
423
433
}
@@ -429,7 +439,7 @@ private function validateClosure($value, array $rule) : bool
429
439
* @param array $rule
430
440
* @return bool
431
441
*/
432
- private function validateCallable ($ value , array $ rule ) : bool
442
+ private function validateCallable ($ value , array $ rule = [] ) : bool
433
443
{
434
444
return is_callable ($ value );
435
445
}
@@ -441,25 +451,25 @@ private function validateCallable($value, array $rule) : bool
441
451
* @param array $rule
442
452
* @return bool
443
453
*/
444
- private function validateDateTime ($ value , array $ rule ) : bool
454
+ private function validateDateTime ($ value , array $ rule = [] ) : bool
445
455
{
446
- if (!is_string ($ value ) && !is_int ($ value )){
456
+ if (!is_string ($ value ) && !is_int ($ value )) {
447
457
return false ;
448
458
}
449
459
450
460
$ value = (string ) $ value ;
451
461
452
462
// Returns a timestamp on success, FALSE otherwise
453
- if (($ time = strtotime ($ value )) === false ){
463
+ if (($ time = strtotime ($ value )) === false ) {
454
464
return false ;
455
465
}
456
466
457
467
// Returns new \DateTime instance of success, FALSE otherwise
458
- if (($ date = date_create ($ value )) === false ){
468
+ if (($ date = date_create ($ value )) === false ) {
459
469
return false ;
460
470
}
461
471
462
- if (isset ($ rule ['format ' ])){
472
+ if (isset ($ rule ['format ' ])) {
463
473
return $ date ->format ($ rule ['format ' ]) == $ value ;
464
474
}
465
475
0 commit comments