diff --git a/docs/Static-methods/Regex.md b/docs/Static-methods/Regex.md index f45a707..f86e3fb 100644 --- a/docs/Static-methods/Regex.md +++ b/docs/Static-methods/Regex.md @@ -34,6 +34,56 @@ File: `src/Utilities/Regex.php` - value: `"Lorem ipsum. Dolor sit 12.34 amet."` - result: `"lorem-ipsum-dolor-sit-1234-amet"` +### clearBeginningSlash(string): string + +> Clears, removes slash from the beginning of given string + +##### Arguments + +- `string $string` - String that may contains slash as the 1st character + +##### Examples + +1) + + - string: `"lorem ipsum"` + - result: `"lorem ipsum"` + +2) + + - string: `"/lorem ipsum"` + - result: `"lorem ipsum"` + +3) + + - string: `"/ lorem 123 ipsum"` + - result: `" lorem 123 ipsum"` + +### clearEndingSlash(string): string + +> Clears, removes slash from the end of given string + +##### Arguments + +- `string $string` - String that may contains slash as the last character + +##### Examples + +1) + + - string: `"lorem ipsum"` + - result: `"lorem ipsum"` + +2) + + - string: `"lorem ipsum/"` + - result: `"lorem ipsum"` + +3) + + - string: `"lorem 123 ipsum /"` + - result: `"lorem 123 ipsum "` + # More 1. [Base test case (with common methods and data providers)](../Base-test-case.md) diff --git a/src/Utilities/Regex.php b/src/Utilities/Regex.php index 78705da..1077bda 100644 --- a/src/Utilities/Regex.php +++ b/src/Utilities/Regex.php @@ -40,6 +40,8 @@ class Regex 'color' => '/^[a-f0-9]{6}$/i', 'bundleName' => '/^(([A-Z]{1}[a-z0-9]+)((?2))*)(Bundle)$/', 'binaryValue' => '/[^\x20-\x7E\t\r\n]/', + 'beginningSlash' => '|^\/|', + 'endingSlash' => '|\/$|', /* * Matches: @@ -999,4 +1001,18 @@ class Regex return preg_replace('/[-\s]+/', '-', $result); } + + public static function clearBeginningSlash(string $string): string + { + $pattern = static::$patterns['beginningSlash']; + + return preg_replace($pattern, '', $string); + } + + public static function clearEndingSlash(string $string): string + { + $pattern = static::$patterns['endingSlash']; + + return preg_replace($pattern, '', $string); + } } diff --git a/tests/Utilities/RegexTest.php b/tests/Utilities/RegexTest.php index df9b925..3c404ea 100644 --- a/tests/Utilities/RegexTest.php +++ b/tests/Utilities/RegexTest.php @@ -649,6 +649,28 @@ class RegexTest extends BaseTestCase self::assertSame($expected, Regex::createSlug($value)); } + /** + * @param string $string + * @param string $expected + * + * @dataProvider provideStringToClearBeginningSlash + */ + public function testClearBeginningSlash(string $string, string $expected): void + { + static::assertSame($expected, Regex::clearBeginningSlash($string)); + } + + /** + * @param string $string + * @param string $expected + * + * @dataProvider provideStringToClearEndingSlash + */ + public function testClearEndingSlash(string $string, string $expected): void + { + static::assertSame($expected, Regex::clearEndingSlash($string)); + } + /** * Provides name of bundle and information if it's valid name * @@ -1983,6 +2005,212 @@ class RegexTest extends BaseTestCase ]; } + public function provideStringToClearBeginningSlash(): ?Generator + { + yield[ + '', + '', + ]; + + yield[ + '/', + '', + ]; + + yield[ + '\\', + '\\', + ]; + + yield[ + '//', + '/', + ]; + + yield[ + 'lorem ipsum', + 'lorem ipsum', + ]; + + yield[ + '1234', + '1234', + ]; + + yield[ + 'lorem/ipsum', + 'lorem/ipsum', + ]; + + yield[ + 'lorem / ipsum', + 'lorem / ipsum', + ]; + + yield[ + 'lorem\ipsum', + 'lorem\ipsum', + ]; + + yield[ + 'lorem \ ipsum', + 'lorem \ ipsum', + ]; + + yield[ + '\lorem ipsum', + '\lorem ipsum', + ]; + + yield[ + '\ lorem ipsum', + '\ lorem ipsum', + ]; + + yield[ + 'lorem ipsum/', + 'lorem ipsum/', + ]; + + yield[ + 'lorem ipsum /', + 'lorem ipsum /', + ]; + + yield[ + '/lorem ipsum', + 'lorem ipsum', + ]; + + yield[ + '/ lorem ipsum', + ' lorem ipsum', + ]; + + yield[ + '/123 456', + '123 456', + ]; + + yield[ + '/ 123 456', + ' 123 456', + ]; + + yield[ + '/lorem 123 ipsum 456', + 'lorem 123 ipsum 456', + ]; + + yield[ + '/ lorem 123 ipsum 456', + ' lorem 123 ipsum 456', + ]; + } + + public function provideStringToClearEndingSlash(): ?Generator + { + yield[ + '', + '', + ]; + + yield[ + '/', + '', + ]; + + yield[ + '\\', + '\\', + ]; + + yield[ + '//', + '/', + ]; + + yield[ + 'lorem ipsum', + 'lorem ipsum', + ]; + + yield[ + '1234', + '1234', + ]; + + yield[ + 'lorem/ipsum', + 'lorem/ipsum', + ]; + + yield[ + 'lorem / ipsum', + 'lorem / ipsum', + ]; + + yield[ + 'lorem\ipsum', + 'lorem\ipsum', + ]; + + yield[ + 'lorem \ ipsum', + 'lorem \ ipsum', + ]; + + yield[ + '\lorem ipsum', + '\lorem ipsum', + ]; + + yield[ + '\ lorem ipsum', + '\ lorem ipsum', + ]; + + yield[ + '/lorem ipsum', + '/lorem ipsum', + ]; + + yield[ + '/ lorem ipsum', + '/ lorem ipsum', + ]; + + yield[ + 'lorem ipsum/', + 'lorem ipsum', + ]; + + yield[ + 'lorem ipsum /', + 'lorem ipsum ', + ]; + + yield[ + '123 456/', + '123 456', + ]; + + yield[ + '123 456 /', + '123 456 ', + ]; + + yield[ + 'lorem 123 ipsum 456/', + 'lorem 123 ipsum 456', + ]; + + yield[ + 'lorem 123 ipsum 456 /', + 'lorem 123 ipsum 456 ', + ]; + } + /** * {@inheritdoc} */