diff --git a/CHANGELOG.md b/CHANGELOG.md index 9896f14..034fe5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +1.0.1 +===== + +* (bug) Fix `Snailer::generateSnail()` generating invalid snails. + + + 1.0.0 ===== diff --git a/src/Snail/Snailer.php b/src/Snail/Snailer.php index 1fa1842..5973f7c 100644 --- a/src/Snail/Snailer.php +++ b/src/Snail/Snailer.php @@ -85,7 +85,7 @@ public function generateSnail (string $text, ?string $locale = null) : string $transformed = $string ->ascii($transliterator) ->replaceMatches('~[^a-z0-9._-]+~', '-') - ->replaceMatches('~--+~', '-') + ->replaceMatches('~([._-])[._-]+~', '$1') ->trim("._-") ->toString(); diff --git a/tests/Snail/SnailerTest.php b/tests/Snail/SnailerTest.php index a945f68..2ede082 100644 --- a/tests/Snail/SnailerTest.php +++ b/tests/Snail/SnailerTest.php @@ -47,6 +47,7 @@ public static function provideIsInvalid () : iterable yield "double dash" => ["a--b"]; yield "special characters" => ["a@b"]; yield "upper case characters" => ["aBc"]; + yield "special characters list" => ["a-._b"]; } /** @@ -63,7 +64,9 @@ public function testIsInvalid (string $input) : void public static function provideGenerateValid () : iterable { yield "uppercase" => ["UPPERCASE-lower", "uppercase-lower"]; + yield "trailing and leading special characters" => ["-test-", "test"]; yield "umlauts" => ["äöü", "aou"]; + yield "collapse special characters list to first" => ["a-._b", "a-b"]; } /**