[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_case
flag 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 since11
contains1
.Similarily, using
'foo.*' => 'distinct:ignore_case'
with data such as'foo' => ['2', '425']
will fail since425
contains2
.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_case
validation flag.