diff --git a/src/Faker/Provider/Base.php b/src/Faker/Provider/Base.php index 0fe8a13f64..9086ea5538 100644 --- a/src/Faker/Provider/Base.php +++ b/src/Faker/Provider/Base.php @@ -525,7 +525,9 @@ public static function regexify($regex = '') }, $regex); // All [ABC] become B (or A or C) $regex = preg_replace_callback('/\[([^\]]+)\]/', static function ($matches) { - $randomElement = Base::randomElement(str_split($matches[1])); + // remove backslashes (that are not followed by another backslash) because they are escape characters + $match = preg_replace('/\\\(?!\\\)/', '', $matches[1]); + $randomElement = Base::randomElement(str_split($match)); //[.] should not be a random character, but a literal . return str_replace('.', '\.', $randomElement); }, $regex); diff --git a/test/Faker/Provider/BaseTest.php b/test/Faker/Provider/BaseTest.php index 9e1f8ef59f..3af3de211e 100644 --- a/test/Faker/Provider/BaseTest.php +++ b/test/Faker/Provider/BaseTest.php @@ -333,6 +333,7 @@ public function regexifyDataProvider() ['[aeiou]', 'basic character class'], ['[a-z]', 'character class range'], ['[a-z1-9]', 'multiple character class range'], + ['[a-z\-]{4}', 'character class range with quantifier and escaped character'], ['a*b+c?', 'single character quantifiers'], ['a{2}', 'brackets quantifiers'], ['a{2,3}', 'min-max brackets quantifiers'],