[5.5] Force preg_grep to match entire value using start and end characters #22235
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue
When using the
distinct:ignore_caseflag during validation it will fail when evaluating integers; specifically, if the value being checked contains the integer under validation.Example
Using
'foo.*' => 'distinct:ignore_case'with data such as'foo' => ['1', '11']will fail since11contains1.Similarily, using
'foo.*' => 'distinct:ignore_case'with data such as'foo' => ['2', '425']will fail since425contains2.Cause
The
preg_grep()pattern does not contain the start (^) and end ($) characters which leads to the function returning partial matches.Solution
Add the start (
^) and end ($) characters to thepreg_grep()pattern. Write additional tests including passing integers to thedistinct:ignore_casevalidation flag.