Блокировка определенных почтовых провайдеров с помощью Regex - PullRequest
1 голос
/ 01 июля 2011

Пожалуйста, не отрицайте вопрос, потому что тот ответ, который я ищу, не является ответом, который кто-то должен искать. Я полностью осознаю это, но это не моя идея, я просто должен доставить: D

В CakePHP у меня есть следующий dataentry в моей модели:

    'email' => array(
        'email' => array(
            'rule' => array('email',false,'(^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$)')
        ),
    )

Правило электронной почты является распространенной функцией при проверке данных cakephp, а второй и третий параметры являются необязательными. Третье - это регулярное выражение. Я не был доволен данной строкой регулярных выражений, поэтому я добавил свою собственную. Теперь я хочу исключить адреса Gmail, Hotmail и Yahoo.

Как я могу изменить Регулярное выражение, чтобы эти адреса выдали ложное в результате? Я не могу понять это правильно.

Ответы [ 2 ]

6 голосов
/ 01 июля 2011

С какой стати вы хотите исключить адреса Gmail, Hotmail и Yahoo?Есть много людей, у которых есть только один из этих адресов, а других нет.Это плохая идея.Если вы нацелены на определенную «аудиторию», я бы предложил вместо этого создать список разрешенных доменов.

В любом случае, вот вам функциональное регулярное выражение, которое короче того, которое у вас уже есть ... попробуйте

\b[\w\.-]+@((?!gmail|googlemail|yahoo|hotmail).)[\w\.-]+\.\w{2,4}\b
2 голосов
/ 01 июля 2011

Не используйте для этого регулярное выражение.

Правильным решением является explode() адрес электронной почты в знаке @, а затем использование сравнения простых строк или даже in_array() для проверки того, находится ли домен в черном списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...