Форум 1С-Битрикс

Задавайте свои вопросы и отвечайте на вопросы других участников форума

Страницы: 1
Ответить
Очистить email от ненужных символов php
 
Проблема в том что из сервиса приходят данные в том числе email без валидации на их стороне. Email с лишними пробелами точками и другими запрещенными символами. Как при помощи php убрать из строки email посторонние символы.
 
В названии электронной почты разрешены следующие символы
  1. Заглавные и строчные буквы латинского алфавита (a-z, A-Z), хотя с сегодняшним бумом на национальные домены, я думаю, что все буквы уже разрешены.
  2. Цифры 0-9
  3. Символы ! # $ % & ' * + - / = ? ^ _ ` { | } ~
  4. Точка (.) Но если она стоит не в начале, не в конце и их не две подряд.
1. Допустим есть емайл

$email= "   .Jб,! # $ % & ' * + - / = ? ^ _ ` { | } ~ohn#% ^.@@@@&*()@(.doe)@.ex_-a//m#p%l...e.com. ";


2. Применим очищающий фильтр FILTER_SANITIZE_EMAIL, который удаляет все символы, кроме букв, цифр и !#$%&'*+-=?^_`{|}~@.[]

$email =  filter_var ( $email, FILTER_SANITIZE_EMAIL);


3.  Удалим повторяющиеся точки

$email  = preg_replace('/\.{2,}/', ".", $email );


4.  Разделим емайл на имя и домен по последнему символу собаки @

preg_match('/(.*)@(.*)$/', $email, $arResult);

$arResult[1]; //имя

$arResult[2]; //домен


5. Вычистим имя

$arResult[1] = preg_replace('/^\./', "", $arResult[1]); //удаляем первый символ точки

$arResult[1] = preg_replace('/\.$/', "", $arResult[1]); //удаляем последний символ точки

$arResult[1] = preg_replace('/@/', "", $arResult[1]); //удаляем собачки


6.  Вычистим домен

$arResult[2] = preg_replace('/^\./', "", $arResult[2]); //удаляем первый символ точки

$arResult[2] = preg_replace('/\.$/', "", $arResult[2]); //удаляем последний символ точки

$arResult[2] = preg_replace('/[^a-z0-9_\.-]/iu', "", $arResult[2]); //удаляем все запрещенные символы в домене кроме, латинских букв, точек, знака тире и нижнего подчеркивания


7. Удалим, т.к. там лежит еще не обработанный email из 3 пункта

unset($arResult[0]);  


8. Выведем результат

$strResult = implode("@", $arResult);

print "<pre>";print_r($strResult);print "</pre>";


Если у кого есть дополнения или более изящный вариант решения, напишите пожалуйста
 
Антон, спасибо! Круто реализовал :like:
Страницы: 1
Ответить
Читают тему (гостей: 1)
Форма ответов
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Отправить Отменить