Normalizer   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 6
Bugs 1 Features 0
Metric Value
wmc 7
c 6
b 1
f 0
lcom 1
cbo 1
dl 0
loc 95
ccs 60
cts 60
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A regularize() 0 20 1
A digitize() 0 6 1
B normalizeAddress() 0 36 4
A normalize() 0 7 1
1
<?php
2
3
namespace Recca0120\Twzipcode;
4
5
use Recca0120\Lodash\JString;
6
7
class Normalizer extends JString
8
{
9
    /**
10
     * regularize.
11
     *
12
     * @return static
13
     */
14 74
    public function regularize()
15
    {
16 74
        return $this
17 74
            ->toHalfCase()
18 74
            ->replace('/^\d+/', '')
19 74
            ->replace([
20 74
                ' ' => '',
21 74
                ',' => '',
22 74
                '~' => '之',
23 74
                '-' => '之',
24 74
                '台灣' => '臺灣',
25 74
                '台北' => '臺北',
26 74
                '台中' => '臺中',
27 74
                '台南' => '臺南',
28 74
                '台東' => '臺東',
29 74
                '釣魚台' => '釣魚臺',
30 74
                '台西鄉' => '臺西鄉',
31 74
                '霧台鄉' => '霧臺鄉',
32 74
            ]);
33
    }
34
35
    /**
36
     * digitize.
37
     *
38
     * @return static
39
     */
40 78
    public function digitize()
41
    {
42
        return $this->replace('/[一二三四五六七八九十百千]+(?=[段路街巷弄號樓])/u', function ($m) {
43 18
            return (new static($m[0]))->chineseToNumber();
44 78
        });
45
    }
46
47
    /**
48
     * normalizeAddress.
49
     *
50
     * @return static
51
     */
52 78
    public function normalizeAddress()
53
    {
54 78
        return $this
55 78
            ->replace([
56 78
                '台灣' => '臺灣',
57 78
                '台北' => '臺北',
58 78
                '台中' => '臺中',
59 78
                '台南' => '臺南',
60 78
                '台東' => '臺東',
61 78
                '釣魚台' => '釣魚臺',
62 78
                '台西鄉' => '臺西鄉',
63 78
                '霧台鄉' => '霧臺鄉',
64 78
                '[石曹]村' => '[石曹]里',
65 78
                '頭家東村' => '頭家東里',
66 78
                '拉芙蘭村' => '拉芙蘭里',
67 78
                '那瑪夏鄉' => '那瑪夏區',
68 78
                '達卡努瓦村' => '達卡努瓦里',
69 78
                '瑪雅村' => '瑪雅里',
70 78
                '南沙魯村' => '南沙魯里',
71 78
            ])
72 78
            ->replace('/^北縣/', '臺北縣')
73 78
            ->replace('/^北市/', '臺北市')
74 78
            ->replace('/^(臺北|臺中|臺南|高雄)縣(?:(\w{2})[市鄉鎮])?(?:(\w{2})村)?/u', function ($m) {
75 5
                return ($m[1] === '臺北' ? '新北' : $m[1]).'市'.
76 5
                    (isset($m[2]) === true ? $m[2].'區' : '').
77 5
                    (isset($m[3]) === true ? $m[3].'里' : '');
78 78
            })->replace([
79 78
                '苗栗縣頭份鎮' => '苗栗縣頭份市',
80 78
                '彰化縣員林鎮' => '彰化縣員林市',
81 78
                '臺南市中區' => '臺南市中西區',
82 78
                '臺南市西區' => '臺南市中西區',
83 78
                '南海諸島東沙' => '南海島東沙群島',
84 78
                '南海諸島南沙' => '南海島南沙群島',
85 78
                '南海諸島釣魚臺列嶼' => '釣魚臺釣魚臺',
86 78
            ]);
87
    }
88
89
    /**
90
     * normalize.
91
     *
92
     * @return static
93
     */
94 73
    public function normalize()
95
    {
96 73
        return $this
97 73
            ->trim()
98 73
            ->regularize()
99 73
            ->digitize();
100
    }
101
}
102