Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
9 / 9
CRAP
100.00% covered (success)
100.00%
1 / 1
CaseName
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
9 / 9
9
100.00% covered (success)
100.00%
1 / 1
 kebab
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 snake
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 pascal
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 camel
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 lower
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 upper
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 trim
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 replaceDelimiter
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 addCamelCaseDelimiter
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3/**
4 * @license MIT
5 * @author hazuki3417<hazuki3417@gmail.com>
6 * @copyright 2021 hazuki3417 all rights reserved.
7 */
8
9namespace Selen\Str\Exchanger;
10
11/**
12 * ケースフォールディングを提供するクラスです
13 */
14class CaseName
15{
16    /**
17     * 文字列をケバブケースに変換します
18     *
19     * @param string $value 変換する文字列を渡します
20     *
21     * @return string 変換した文字列を返します
22     */
23    public static function kebab(string $value): string
24    {
25        $delimiter = '-';
26        $tmp       = self::trim(self::addCamelCaseDelimiter($value));
27        return self::lower(self::replaceDelimiter($delimiter, $tmp));
28    }
29
30    /**
31     * 文字列をスネークケースに変換します
32     *
33     * @param string $value 変換する文字列を渡します
34     *
35     * @return string 変換した文字列を返します
36     */
37    public static function snake(string $value): string
38    {
39        $delimiter = '_';
40        $tmp       = self::trim(self::addCamelCaseDelimiter($value));
41        return self::lower(self::replaceDelimiter($delimiter, $tmp));
42    }
43
44    /**
45     * 文字列をパスカルケースに変換します
46     *
47     * @param string $value 変換する文字列を渡します
48     *
49     * @return string 変換した文字列を返します
50     */
51    public static function pascal(string $value): string
52    {
53        $delimiter = ' ';
54        $tmp       = self::trim(self::addCamelCaseDelimiter($value));
55        $str       = \ucwords(self::replaceDelimiter($delimiter, $tmp));
56        return \ucfirst(\preg_replace('/[ ]+/', '', $str));
57    }
58
59    /**
60     * 文字列をキャメルケースに変換します
61     *
62     * @param string $value 変換する文字列を渡します
63     *
64     * @return string 変換した文字列を返します
65     */
66    public static function camel(string $value): string
67    {
68        $delimiter = ' ';
69        $tmp       = self::trim(self::addCamelCaseDelimiter($value));
70        $str       = \ucwords(self::replaceDelimiter($delimiter, $tmp));
71        return \lcfirst(\preg_replace('/[ ]+/', '', $str));
72    }
73
74    /**
75     * 文字列をローワーケースに変換します
76     *
77     * @param string $value 変換する文字列を渡します
78     *
79     * @return string 変換した文字列を返します
80     */
81    public static function lower(string $value): string
82    {
83        return \mb_strtolower($value);
84    }
85
86    /**
87     * 文字列をアッパーケースに変換します
88     *
89     * @param string $value 変換する文字列を渡します
90     *
91     * @return string 変換した文字列を返します
92     */
93    public static function upper(string $value): string
94    {
95        return \mb_strtoupper($value);
96    }
97
98    /**
99     * 文字列の前後にある特定の文字(' ', '_', '-')をトリムします
100     *
101     * @param string $value 文字列を渡します
102     *
103     * @return string トリムした文字列を返します
104     */
105    private static function trim(string $value): string
106    {
107        return trim($value, ' _-');
108    }
109
110    /**
111     * 文字列内にある特定の文字(' ', '_', '-')を置換します
112     *
113     * @param string $delimiter 区切り文字を渡します
114     * @param string $value     変換する文字列を渡します
115     *
116     * @return string 変換した文字列を返します
117     */
118    private static function replaceDelimiter(string $delimiter, string $value): string
119    {
120        return \preg_replace('/[-|_| ]+/', $delimiter, $value);
121    }
122
123    /**
124     * キャメルケースに該当する文字の先頭に区切り文字(' ')を追加します
125     *
126     * @param string $value 変換する文字列を渡します
127     *
128     * @return string 変換した文字列を返します
129     */
130    private static function addCamelCaseDelimiter(string $value): string
131    {
132        $delimiter  = ' ';
133        $replaceStr = \sprintf('%s${1}', $delimiter);
134        return preg_replace('/([A-Z])/', $replaceStr, $value);
135    }
136}