Regex   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 39
rs 10
c 0
b 0
f 0
wmc 17
lcom 0
cbo 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A quantifyGroup() 0 6 2
B fetchQuantifier() 0 20 15
1
<?php
2
3
namespace Larapulse\Support\Helpers;
4
5
class Regex
6
{
7
    public static function quantifyGroup(string $str, $min = null, $max = INF, string $tag = null) : string
8
    {
9
        $tag = $tag ? "?<{$tag}>" : '';
10
11
        return "({$tag}{$str})".self::fetchQuantifier($min, $max);
12
    }
13
14
    /**
15
     * Build quantifier from parameters
16
     *
17
     * @param int|null  $min
18
     * @param float|int $max
19
     * @param bool      $lazyLoad
20
     *
21
     * @return string
22
     */
23
    public static function fetchQuantifier($min = null, $max = INF, bool $lazyLoad = false) : string
24
    {
25
        $lazy = $lazyLoad ? '?' : '';
26
27
        switch (true) {
28
            case ($min === 0 && $max === 1):
29
                return '?'.$lazy;
30
            case ($min === 0 && $max === INF):
31
                return '*'.$lazy;
32
            case ($min === 1 && $max === INF):
33
                return '+'.$lazy;
34
            case (is_int($min) && $min >= 1 && $max === null):
35
                return '{'.$min.'}'.$lazy;
36
            case (is_int($min) && (is_int($max) || $max === INF)):
37
                $max = is_int($max) ? $max : '';
38
                return '{'.$min.','.$max.'}'.$lazy;
39
            default:
40
                return '';
41
        }
42
    }
43
}
44