Created
December 31, 2024 06:57
-
-
Save okumurakengo/73f590d668e33d8f4f486f74d192340a to your computer and use it in GitHub Desktop.
ChatGPTに作ってもらったキャメルケースとスネークケースの変換クラス
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| declare(strict_types=1); | |
| namespace App\Handlers; | |
| /** | |
| * Class StringCaseHandler | |
| */ | |
| class StringCaseHandler | |
| { | |
| /** | |
| * @param string $string | |
| * @return bool | |
| */ | |
| public static function isCamelCase(string $string): bool | |
| { | |
| return preg_match('/^[a-z]+(?:[A-Z][a-z]*)*$/', $string) === 1; | |
| } | |
| /** | |
| * @param string $string | |
| * @return bool | |
| */ | |
| public static function isPascalCase(string $string): bool | |
| { | |
| return preg_match('/^[A-Z][a-z]*(?:[A-Z][a-z]*)*$/', $string) === 1; | |
| } | |
| /** | |
| * @param string $string | |
| * @return bool | |
| */ | |
| public static function isSnakeCase(string $string): bool | |
| { | |
| return preg_match('/^[a-z]+(?:_[a-z]+)*$/', $string) === 1; | |
| } | |
| /** | |
| * Convert CamelCase or PascalCase to snake_case. | |
| * | |
| * @param string $input | |
| * @return string | |
| */ | |
| public static function toSnakeCase(string $input): string | |
| { | |
| // キャメルケースやパスカルケースをアンダースコアに変換し、小文字にする | |
| return strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $input)); | |
| } | |
| /** | |
| * Convert snake_case to camelCase. | |
| * | |
| * @param string $input | |
| * @return string | |
| */ | |
| public static function toCamelCase(string $input): string | |
| { | |
| // アンダースコアの次の文字を大文字に変換し結合 | |
| return lcfirst(str_replace('_', '', ucwords($input, '_'))); | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| namespace Tests\Unit\App\Handler; | |
| use App\Handlers\StringCaseHandler; | |
| use PHPUnit\Framework\TestCase; | |
| class StringCaseHandlerTest extends TestCase | |
| { | |
| public function testIsCamelCase() | |
| { | |
| $this->assertTrue(StringCaseHandler::isCamelCase('camelCase')); | |
| $this->assertTrue(StringCaseHandler::isCamelCase('camelCaseExample')); | |
| $this->assertFalse(StringCaseHandler::isCamelCase('CamelCase')); // PascalCase | |
| $this->assertFalse(StringCaseHandler::isCamelCase('snake_case')); | |
| $this->assertFalse(StringCaseHandler::isCamelCase('camel_case')); | |
| $this->assertFalse(StringCaseHandler::isCamelCase('camelCase123')); | |
| } | |
| public function testIsPascalCase() | |
| { | |
| $this->assertTrue(StringCaseHandler::isPascalCase('PascalCase')); | |
| $this->assertTrue(StringCaseHandler::isPascalCase('PascalCaseExample')); | |
| $this->assertFalse(StringCaseHandler::isPascalCase('camelCase')); | |
| $this->assertFalse(StringCaseHandler::isPascalCase('snake_case')); | |
| $this->assertFalse(StringCaseHandler::isPascalCase('Pascal_case')); | |
| $this->assertFalse(StringCaseHandler::isPascalCase('PascalCase123')); | |
| } | |
| public function testIsSnakeCase() | |
| { | |
| $this->assertTrue(StringCaseHandler::isSnakeCase('snake_case')); | |
| $this->assertTrue(StringCaseHandler::isSnakeCase('snake_case_example')); | |
| $this->assertFalse(StringCaseHandler::isSnakeCase('Snake_case')); // Pascal-like | |
| $this->assertFalse(StringCaseHandler::isSnakeCase('snakeCase')); // camelCase-like | |
| $this->assertFalse(StringCaseHandler::isSnakeCase('snake_case123')); | |
| $this->assertFalse(StringCaseHandler::isSnakeCase('snake__case')); // invalid snake_case | |
| } | |
| public function testToSnakeCase() | |
| { | |
| // キャメルケースの変換テスト | |
| $this->assertEquals('camel_case', StringCaseHandler::toSnakeCase('camelCase')); | |
| $this->assertEquals('camel_case_example', StringCaseHandler::toSnakeCase('camelCaseExample')); | |
| // パスカルケースの変換テスト | |
| $this->assertEquals('pascal_case', StringCaseHandler::toSnakeCase('PascalCase')); | |
| $this->assertEquals('pascal_case_example', StringCaseHandler::toSnakeCase('PascalCaseExample')); | |
| // その他ケース | |
| $this->assertEquals('already_snake_case', StringCaseHandler::toSnakeCase('already_snake_case')); | |
| } | |
| public function testToCamelCase() | |
| { | |
| // スネークケースの変換テスト | |
| $this->assertEquals('camelCase', StringCaseHandler::toCamelCase('camel_case')); | |
| $this->assertEquals('camelCaseExample', StringCaseHandler::toCamelCase('camel_case_example')); | |
| // 単一単語 | |
| $this->assertEquals('single', StringCaseHandler::toCamelCase('single')); | |
| // その他ケース | |
| $this->assertEquals('alreadyCamelCase', StringCaseHandler::toCamelCase('alreadyCamelCase')); // そのまま | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment