WP_Duotone::colord_parse_rgba_string( string $input ): array|null

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only by core. It is listed here for completeness.

Parses a valid RGB[A] CSS color function/string.

Description

Direct port of colord’s parseRgbaString function.

Parameters

$inputstringrequired
The RGBA string to parse.

Return

array|null An array of RGBA values or null if the RGB string is invalid.

Source

private static function colord_parse_rgba_string( $input ) {
	// Functional syntax.
	$is_match = preg_match(
		'/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i',
		$input,
		$match
	);

	if ( ! $is_match ) {
		// Whitespace syntax.
		$is_match = preg_match(
			'/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i',
			$input,
			$match
		);
	}

	if ( ! $is_match ) {
		return null;
	}

	/*
	 * For some reason, preg_match doesn't include empty matches at the end
	 * of the array, so we add them manually to make things easier later.
	 */
	for ( $i = 1; $i <= 8; $i++ ) {
		if ( ! isset( $match[ $i ] ) ) {
			$match[ $i ] = '';
		}
	}

	if ( $match[2] !== $match[4] || $match[4] !== $match[6] ) {
		return null;
	}

	return self::colord_clamp_rgba(
		array(
			'r' => (float) $match[1] / ( $match[2] ? 100 / 255 : 1 ),
			'g' => (float) $match[3] / ( $match[4] ? 100 / 255 : 1 ),
			'b' => (float) $match[5] / ( $match[6] ? 100 / 255 : 1 ),
			'a' => '' === $match[7] ? 1 : (float) $match[7] / ( $match[8] ? 100 : 1 ),
		)
	);
}

Changelog

VersionDescription
6.3.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.