Регулярка: preg_match(‘/^[a-f0-9]{32}$/’, $md5_hash) — проверка контрольной суммы файла.

Регулярное выражение `/^[a-f0-9]{32}$/` используется в PHP для проверки того, является ли строка корректным MD5-хешем. Разберём каждый элемент паттерна подробно.

**Что такое MD5-хеш?**
MD5 (Message Digest Algorithm 5) — это алгоритм хеширования, который преобразует произвольные данные в строку фиксированной длины из 32 шестнадцатеричных символов. Например: `d41d8cd98f00b204e9800998ecf8427e`. Такие хеши широко используются для проверки целостности файлов, хранения паролей (хотя сейчас не рекомендуется) и идентификации данных.

**Разбор регулярного выражения:**
— `/` — открывающий и закрывающий разделитель паттерна в PHP.
— `^` — якорь начала строки. Гарантирует, что совпадение начинается с первого символа.
— `[a-f0-9]` — символьный класс, допускающий только символы от `a` до `f` и цифры от `0` до `9`. Именно эти 16 символов составляют шестнадцатеричную систему счисления (hex).
— `{32}` — квантификатор, указывающий ровно 32 повторения предыдущего класса.
— `$` — якорь конца строки. Гарантирует, что после 32 символов строка заканчивается.

**Почему важны якоря `^` и `$`?**
Без них регулярное выражение `[a-f0-9]{32}` нашло бы совпадение внутри более длинной строки. Например, строка `xyz_d41d8cd98f00b204e9800998ecf8427e_extra` прошла бы проверку, что неверно. Якоря обеспечивают проверку строки целиком.

**Пример использования в PHP:**
php
$md5_hash = md5_file(‘example.zip’);
if (preg_match(‘/^[a-f0-9]{32}$/’, $md5_hash)) {
echo ‘Хеш корректен’;
} else {
echo ‘Некорректный формат хеша’;
}

**Важные нюансы:**
1. Паттерн проверяет только формат строки, но не её смысловую корректность — он не гарантирует, что хеш принадлежит конкретному файлу.
2. MD5-хеши могут содержать заглавные буквы (`A-F`), если генерируются сторонними инструментами. В таком случае паттерн следует расширить: `[a-fA-F0-9]{32}` или добавить флаг `i` для регистронезависимого поиска: `/^[a-f0-9]{32}$/i`.
3. Функция `preg_match` возвращает `1` при совпадении, `0` при несовпадении и `false` при ошибке.

**Альтернатива через `ctype_xdigit`:**
Для валидации hex-строки можно также использовать `ctype_xdigit($hash) && strlen($hash) === 32`, что работает быстрее, но менее гибко.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.