Эффективные методы обнаружения и удаления email-адресов, ссылок и номеров телефонов в MySQL
- 13.10.2024
- md2
- 0 отзывов
Обнаружение и удаление email-адресов, ссылок и номеров телефонов в базе данных
1. Обнаружение записей с email-адресами, ссылками или номерами телефонов
Когда нужно найти данные, содержащие личную или контактную информацию, такую как email-адреса, ссылки на сайты или номера телефонов, можно воспользоваться SQL-запросами с регулярными выражениями. Пример ниже демонстрирует, как это сделать в MySQL:
SELECT `id`, `contacts`, `text`
FROM `ard`
WHERE
`contacts` REGEXP '[[:alnum:]._%-]+@[[:alnum:].-]+\\.[a-zA-Z]{2,}' -- Email
OR `text` REGEXP '[[:alnum:]._%-]+@[[:alnum:].-]+\\.[a-zA-Z]{2,}' -- Email
OR `contacts` REGEXP '(https?://|www\\.)[a-zA-Z0-9.-]+' -- Ссылки
OR `text` REGEXP '(https?://|www\\.)[a-zA-Z0-9.-]+' -- Ссылки
OR `contacts` REGEXP '(\\+7|8)?[ -]?\\(?[0-9]{3}\\)?[ -]?[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{2}' -- Телефон
OR `text` REGEXP '(\\+7|8)?[ -]?\\(?[0-9]{3}\\)?[ -]?[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{2}'; -- Телефон
Этот запрос ищет:
- Email-адреса (например,
example@mail.com
). - Ссылки (например,
https://example.com
илиwww.example.ru
). - Телефонные номера (например,
+7 (123) 456-78-90
или8 (495) 123-45-67
).
Используя регулярные выражения, можно находить эти данные в полях contacts
и text
таблицы ard
.
2. Удаление email, ссылок и телефонов
После обнаружения записей с нежелательной информацией можно заменить их на пустую строку, чтобы обезопасить базу данных от хранения конфиденциальной информации. Если у вас установлена MySQL версии 8.0+ или MariaDB 10.0+, можно воспользоваться функцией REGEXP_REPLACE()
.
Пример запроса для удаления email-адресов, ссылок и номеров телефонов:
UPDATE `ard`
SET
`contacts` = REGEXP_REPLACE(`contacts`, '[[:alnum:]._%-]+@[[:alnum:].-]+\\.[a-zA-Z]{2,}', ''),
`text` = REGEXP_REPLACE(`text`, '[[:alnum:]._%-]+@[[:alnum:].-]+\\.[a-zA-Z]{2,}', ''),
`contacts` = REGEXP_REPLACE(`contacts`, '(https?://|www\\.)[a-zA-Z0-9.-]+', ''),
`text` = REGEXP_REPLACE(`text`, '(https?://|www\\.)[a-zA-Z0-9.-]+', ''),
`contacts` = REGEXP_REPLACE(`contacts`, '(\\+7|8)?[ -]?\\(?[0-9]{3}\\)?[ -]?[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{2}', ''),
`text` = REGEXP_REPLACE(`text`, '(\\+7|8)?[ -]?\\(?[0-9]{3}\\)?[ -]?[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{2}', '');
Этот запрос удаляет:
- Email-адреса.
- Ссылки на сайты.
- Номера телефонов.
3. Решение для старых версий MySQL (без поддержки REGEXP_REPLACE)
Если ваш сервер работает на старой версии MySQL, которая не поддерживает REGEXP_REPLACE()
, можно использовать язык программирования, например, PHP, для обработки данных после их выборки. В приведённом ниже примере используется функция preg_replace()
в PHP для замены нежелательных данных:
<?php
$query = "SELECT `id`, `contacts`, `text` FROM `ard` WHERE 1";
$result = mysqli_query($db, $query);
while ($row = mysqli_fetch_assoc($result)) {
$id = $row['id'];
$contacts = preg_replace([
'/[[:alnum:]._%-]+@[[:alnum:].-]+\\.[a-zA-Z]{2,}/', // Email
'/(https?:\/\/|www\.)[a-zA-Z0-9.-]+/', // Ссылки
'/(\+7|8)?[ -]?\(?[0-9]{3}\)?[ -]?[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{2}/' // Телефон
], '', $row['contacts']);
$text = preg_replace([
'/[[:alnum:]._%-]+@[[:alnum:].-]+\\.[a-zA-Z]{2,}/',
'/(https?:\/\/|www\.)[a-zA-Z0-9.-]+/',
'/(\+7|8)?[ -]?\(?[0-9]{3}\)?[ -]?[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{2}/'
], '', $row['text']);
$updateQuery = "UPDATE `ard` SET `contacts` = '$contacts', `text` = '$text' WHERE `id` = $id";
mysqli_query($db, $updateQuery);
}
?>
Этот код выбирает все записи из таблицы, затем удаляет email-адреса, ссылки и номера телефонов с помощью регулярных выражений в PHP, и обновляет записи в базе данных.
Использование регулярных выражений в SQL и PHP помогает эффективно обнаруживать и удалять конфиденциальную информацию, такую как email-адреса, ссылки и номера телефонов. Такой подход особенно полезен для соблюдения конфиденциальности данных и предотвращения утечки личной информации.
Отзывы (0)
Теги: MySQL, регулярные выражения, конфиденциальность данных, email-адреса, ссылки, номера телефонов, SQL, обновление данных