Coding Standards: Remove unnecessary ignore annotation in wp_kses_hair_parse().

It is perfectly possible to write a commented regex with layout for readability by using the `x` modifier.

As per the manual:
> x (`PCRE_EXTENDED`)
>
> If this modifier is set, whitespace data characters in the pattern are totally ignored except when escaped or inside a character class, and characters between an unescaped # outside a character class and the next newline character, inclusive, are also ignored. This is equivalent to Perl's /x modifier, and makes it possible to include commentary inside complicated patterns.
>
> Note, however, that this applies only to data characters. Whitespace characters may never appear within special character sequences in a pattern, for example within the sequence (?( which introduces a conditional subpattern.

Reference: [https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php PHP Manual: Pattern Modifiers].

This commit rewrites these two regexes to use the `x` modifier and gets rid of the unnecessary `phpcs:disable` comments.

The tests in the `tests/phpunit/tests/db/dbDelta.php` file cover this change.

Follow-up to [42249].

Props jrf.
See #59650.
Built from https://develop.svn.wordpress.org/trunk@57056


git-svn-id: http://core.svn.wordpress.org/trunk@56567 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Sergey Biryukov 2023-11-03 15:33:22 +00:00
parent 82935cf778
commit 0768c65310
2 changed files with 25 additions and 24 deletions

View File

@ -1536,36 +1536,37 @@ function wp_kses_hair_parse( $attr ) {
return array(); return array();
} }
// phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
$regex = $regex =
'(?:' '(?:
. '[_a-zA-Z][-_a-zA-Z0-9:.]*' // Attribute name. [_a-zA-Z][-_a-zA-Z0-9:.]* # Attribute name.
. '|' |
. '\[\[?[^\[\]]+\]\]?' // Shortcode in the name position implies unfiltered_html. \[\[?[^\[\]]+\]\]? # Shortcode in the name position implies unfiltered_html.
. ')' )
. '(?:' // Attribute value. (?: # Attribute value.
. '\s*=\s*' // All values begin with '='. \s*=\s* # All values begin with "=".
. '(?:' (?:
. '"[^"]*"' // Double-quoted. "[^"]*" # Double-quoted.
. '|' |
. "'[^']*'" // Single-quoted. \'[^\']*\' # Single-quoted.
. '|' |
. '[^\s"\']+' // Non-quoted. [^\s"\']+ # Non-quoted.
. '(?:\s|$)' // Must have a space. (?:\s|$) # Must have a space.
. ')' )
. '|' |
. '(?:\s|$)' // If attribute has no value, space is required. (?:\s|$) # If attribute has no value, space is required.
. ')' )
. '\s*'; // Trailing space is optional except as mentioned above. \s* # Trailing space is optional except as mentioned above.
// phpcs:enable ';
/* /*
* Although it is possible to reduce this procedure to a single regexp, * Although it is possible to reduce this procedure to a single regexp,
* we must run that regexp twice to get exactly the expected result. * we must run that regexp twice to get exactly the expected result.
*
* Note: do NOT remove the `x` modifiers as they are essential for the above regex!
*/ */
$validation = "%^($regex)+$%"; $validation = "%^($regex)+$%x";
$extraction = "%$regex%"; $extraction = "%$regex%x";
if ( 1 === preg_match( $validation, $attr ) ) { if ( 1 === preg_match( $validation, $attr ) ) {
preg_match_all( $extraction, $attr, $attrarr ); preg_match_all( $extraction, $attr, $attrarr );

View File

@ -16,7 +16,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '6.5-alpha-57054'; $wp_version = '6.5-alpha-57056';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.