3v4l.org

run code in 300+ PHP versions simultaneously
<?php function sanitize_hex_color( $color, $maybe_alpha = false ) { if ( '' === $color ) { return ''; } $allowed_lengths = $maybe_alpha ? array( 4, 5, 7, 9 ) : array( 4, 7 ); $correct_length = in_array( strlen( $color ), $allowed_lengths, true ); if ( $correct_length && preg_replace( '|^#([^A-Fa-f0-9]+)$|', '', $color ) === $color ) { return $color; } } /** * Test Suite */ $happy_bc_tests = array( '$maybe_alpha = false, 3 digit' => array( 'color' => '#123', 'expected' => '#123', 'maybe_alpha' => false, ), '$maybe_alpha = false, 3 letter' => array( 'color' => '#abc', 'expected' => '#abc', 'maybe_alpha' => false, ), '$maybe_alpha = false, 3 mixed' => array( 'color' => '#0ab', 'expected' => '#0ab', 'maybe_alpha' => false, ), '$maybe_alpha = false, 6 digit' => array( 'color' => '#123456', 'expected' => '#123456', 'maybe_alpha' => false, ), '$maybe_alpha = false, 6 letter' => array( 'color' => '#abcdef', 'expected' => '#abcdef', 'maybe_alpha' => false, ), '$maybe_alpha = false, 6 mixed' => array( 'color' => '#abc123', 'expected' => '#abc123', 'maybe_alpha' => false, ), ); $unhappy_bc_tests = array( 'empty string' => array( 'color' => '', 'expected' => '', 'maybe_alpha' => false, ), 'no hash' => array( 'color' => '123', 'expected' => null, 'maybe_alpha' => false, ), 'not a-f' => array( 'color' => '#hjg', 'expected' => null, 'maybe_alpha' => false, ), 'not A-F' => array( 'color' => '#HJG', 'expected' => null, 'maybe_alpha' => false, ), '$maybe_alpha = false, 3 digit with 1 alpha' => array( 'color' => '#123f', 'expected' => null, 'maybe_alpha' => false, ), '$maybe_alpha = false, 3 letter with 1 alpha' => array( 'color' => '#abcf', 'expected' => null, 'maybe_alpha' => false, ), '$maybe_alpha = false, 3 mixed with 1 alpha' => array( 'color' => '#0abf', 'expected' => null, 'maybe_alpha' => false, ), '$maybe_alpha = false, 6 digit with 2 alpha' => array( 'color' => '#123456ff', 'expected' => null, 'maybe_alpha' => false, ), '$maybe_alpha = false, 6 letter with 2 alpha' => array( 'color' => '#abcdefff', 'expected' => null, 'maybe_alpha' => false, ), '$maybe_alpha = false, 6 mixed with 2 alpha' => array( 'color' => '#abc123ff', 'expected' => null, 'maybe_alpha' => false, ), ); $happy_alpha_tests = array( // Happy. '$maybe_alpha = true, 3 digit' => array( 'color' => '#123', 'expected' => '#123', 'maybe_alpha' => true, ), '$maybe_alpha = true, 3 letter' => array( 'color' => '#abc', 'expected' => '#abc', 'maybe_alpha' => true, ), '$maybe_alpha = true, 3 mixed' => array( 'color' => '#0ab', 'expected' => '#0ab', 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 digit' => array( 'color' => '#123456', 'expected' => '#123456', 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 letter' => array( 'color' => '#abcdef', 'expected' => '#abcdef', 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 mixed' => array( 'color' => '#abc123', 'expected' => '#abc123', 'maybe_alpha' => true, ), '$maybe_alpha = true, 3 digit with 1 alpha' => array( 'color' => '#123f', 'expected' => '#123f', 'maybe_alpha' => true, ), '$maybe_alpha = true, 3 letter with 1 alpha' => array( 'color' => '#abcf', 'expected' => '#abcf', 'maybe_alpha' => true, ), '$maybe_alpha = true, 3 mixed with 1 alpha' => array( 'color' => '#0abf', 'expected' => '#0abf', 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 digit with 2 alpha' => array( 'color' => '#123456ff', 'expected' => '#123456ff', 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 letter with 2 alpha' => array( 'color' => '#abcdefff', 'expected' => '#abcdefff', 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 mixed with 2 alpha' => array( 'color' => '#abc123ff', 'expected' => '#abc123ff', 'maybe_alpha' => true, ), ); $unhappy_alpha_tests = array( 'empty string' => array( 'color' => '', 'expected' => '', 'maybe_alpha' => false, ), 'no hash' => array( 'color' => '123', 'expected' => null, 'maybe_alpha' => false, ), 'not a-f' => array( 'color' => '#hjg', 'expected' => null, 'maybe_alpha' => false, ), 'not A-F' => array( 'color' => '#HJG', 'expected' => null, 'maybe_alpha' => false, ), '$maybe_alpha = true, 3 digit with 2 alpha' => array( 'color' => '#123ff', 'expected' => null, 'maybe_alpha' => true, ), '$maybe_alpha = true, 3 letter with 2 alpha' => array( 'color' => '#abcff', 'expected' => null, 'maybe_alpha' => true, ), '$maybe_alpha = true, 3 mixed with 2 alpha' => array( 'color' => '#0abff', 'expected' => null, 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 digit with 1 alpha' => array( 'color' => '#123456f', 'expected' => null, 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 letter with alpha' => array( 'color' => '#abcff', 'expected' => null, 'maybe_alpha' => true, ), '$maybe_alpha = true, 6 mixed with alpha' => array( 'color' => '#0abff', 'expected' => null, 'maybe_alpha' => true, ), ); function run_tests( $tests = array(), $testdox = false ) { $markers = array( $testdox ? '❌' : 'F', $testdox ? '✅' : '.', ); foreach ( $tests as $test => $data ) { list( $color, $expected, $maybe_alpha ) = array_values( $data ); $actual = sanitize_hex_color( $color, $maybe_alpha ); echo $markers[ (int) ( $actual === $expected ) ] . ( $testdox ? " $test" : '' ) . ( $testdox ? PHP_EOL : '' ); } } echo "Happy BC tests\n"; run_tests( $happy_bc_tests, true ); echo "\nUnhappy BC tests\n"; run_tests( $unhappy_bc_tests, true ); echo "\nHappy alpha tests\n"; run_tests( $happy_alpha_tests, true ); echo "\nUnhappy alpha tests\n"; run_tests( $unhappy_alpha_tests, true );

preferences:
42.69 ms | 406 KiB | 5 Q