В этой статье показано, как использовать регулярное выражение для проверки шестнадцатеричного цветового кода.
Регулярное выражение для шестнадцатеричного цветового кода.
^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$
Объяснение регулярного выражения
^ # start of the line # # start with a number sign `#` ( # start of (group 1) [a-fA-F0-9]{6} # support z-f, A-F and 0-9, with a length of 6 | # or [a-fA-F0-9]{3} # support z-f, A-F and 0-9, with a length of 3 ) # end of (group 1) $ # end of the line
1. Шестнадцатеричный формат цветового кода.
В Интернете мы можем использовать триплет RGB или шестнадцатеричный триплет (шестнадцатеричный цветовой код) для представления цветов на веб-странице. Для шестнадцатеричного цветового кода существует два формата: стандартный шестнадцатеричный триплет и сокращенный шестнадцатеричный формат, оба формата начинаются со знака ведущего числа #
.
1.1 Шестнадцатеричная форма триплета Шестнадцатеричный триплет или стандартный шестнадцатеричный цветовой код использует шестизначную (шестнадцатеричную) форму для представления цвета. Для примеров:
#000000 #FFFFFF #808080 #8A2BE2
Для #8A2BE2
первый шестнадцатеричный 8A
представляет красное значение, второй 2B
представляет зеленое значение, а третий E2
представляет синее значение.
1.2 Сокращенный Шестнадцатеричный Формат Сокращенный шестнадцатеричный код использует трехзначную (шестнадцатеричную) форму для обозначения цвета. Идея состоит в том, чтобы просто удвоить каждую цифру, чтобы получить вышеупомянутый шестнадцатеричный формат триплета. Для примеров:
#000 #FFF #09C
Для #000
он станет #000000
. Для #09C
, он станет #0099CC
.
Прочитайте приведенный ниже синтаксис CSS; оба представляют один и тот же цвет.
p { color: #000; } /* black color, hex triplet format */ h1 { color: #000000; } /* same color as above, shorthand hex format */
Цвет полотна Для получения дополнительной информации, пожалуйста, прочтите это Википедия – Веб-Цвет .
2. Регулярное выражение Java для проверки шестнадцатеричного цветового кода
Ниже приведен пример регулярного выражения Java для проверки шестнадцатеричного цветового кода в стандартных шестнадцатеричных триплетных и сокращенных форматах.
package com.mkyong.regex.hex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HexValidatorWebColor { private static final String HEX_WEBCOLOR_PATTERN = "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$"; private static final Pattern pattern = Pattern.compile(HEX_WEBCOLOR_PATTERN); public static boolean isValid(final String colorCode) { Matcher matcher = pattern.matcher(colorCode); return matcher.matches(); } }
3. Тесты для шестнадцатеричного цветового кода регулярного выражения.
Ниже приведены модульные тесты для проверки списка допустимых и недопустимых шестнадцатеричных цветовых кодов.
package com.mkyong.regex.hex; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; public class HexValidatorWebColorTest { @ParameterizedTest(name = "#{index} - Run test with web color = {0}") @MethodSource("validWebColorProvider") void test_color_regex_valid(String color) { assertTrue(HexValidatorWebColor.isValid(color)); } @ParameterizedTest(name = "#{index} - Run test with web color = {0}") @MethodSource("invalidWebColorProvider") void test_color_regex_invalid(String color) { assertFalse(HexValidatorWebColor.isValid(color)); } static StreamvalidWebColorProvider() { return Stream.of( "#000000", "#999999", "#1a1a1a", "#1A1A1A", "#0f0f0f", "#0F0F0F", "#bcbcbc", "#BcbCbC", "#000", "#FFF", "#abc", "#def"); } static Stream invalidWebColorProvider() { return Stream.of( "123456", // must start with a # "#afafah", // support a-f only, h is not allowed "#123abce", // invalid length, must length of 3 or 6 "#1234", // invalid length, must length of 3 or 6 "#-123", // support 0-9 only " ", // space ""); // empty } }
4. Регулярное выражение найти шестнадцатеричный цветовой код из строки
Ниже приведен пример использования регулярного выражения для поиска или извлечения шестнадцатеричного цветового кода из строки.
package com.mkyong.regex.hex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FindHexColorCode { public static void main(String[] args) { String str = "p { color: #000; }"; Pattern pattern = Pattern.compile( "^(.*?)(#([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))\\b(.*)$"); Matcher matcher = pattern.matcher(str); if (matcher.matches()) { System.out.println(matcher.groupCount()); // 4 System.out.println(matcher.group(0)); // p { color: #000; } System.out.println(matcher.group(1)); // p { color: System.out.println(matcher.group(2)); // #000 System.out.println(matcher.group(3)); // 000 System.out.println(matcher.group(4)); // ; } } else { System.out.println("no match!"); } } }
Выход
4 p { color: #000; } p { color: #000 000 ; }
В регулярном выражении \лучший
|/метасимвол означает границу слова , который гарантирует, что за шестнадцатеричным цветовым кодом не следует никаких слов.
Скачать Исходный Код
$клон git $клон git
$cd java-регулярное выражение/шестнадцатеричное
Рекомендации
Оригинал: “https://mkyong.com/regular-expressions/how-to-validate-hex-color-code-with-regular-expression/”