Как написать регулярное выражение для бесплатных учетных записей электронной почты?

Я пытаюсь написать регулярное выражение, которое проверяет, содержит ли поле формы электронной почты бесплатный адрес электронной почты, но безуспешно.

По сути, мне нужно проверить, содержит ли электронное письмо: hotmail, yahoo, gmail и т. Д. В поле электронной почты.


person user279464    schedule 23.02.2010    source источник
comment
Что у вас уже есть? Разместите код, который не работает.   -  person ptomato    schedule 23.02.2010
comment
Насколько хорошее покрытие вам нужно? В Интернете есть тысячи бесплатных провайдеров электронной почты. Какую проблему вы пытаетесь решить с помощью этого обнаружения?   -  person Tadeusz A. Kadłubowski    schedule 23.02.2010
comment
У меня есть фиксированный список доменов, предоставленных клиентом, поэтому нужно проверять лишь несколько доменов.   -  person user279464    schedule 23.02.2010
comment
@hixster: Почему клиенту нужно фильтровать бесплатные учетные записи электронной почты? Знают ли они, что список содержит относительно немного популярных провайдеров и не является полным? У вас может появиться масса обновлений этого кода и клиент, который рассердится на вас, потому что вы не знаете названия крупнейшего провайдера бесплатной электронной почты в Парагвае. Это может закончиться на [thedailywtf.com]   -  person Tadeusz A. Kadłubowski    schedule 23.02.2010
comment
Это всего лишь одна проверка в контактной форме, и они попросили, чтобы она работала таким образом, несмотря на мои предложения. Они обновляют правила через CMS, так что ничего страшного. их интересует только предотвращение крупных провайдеров Google и др.   -  person user279464    schedule 23.02.2010
comment
Это вернется, чтобы преследовать вас. Многократно.   -  person Benjol    schedule 25.02.2010


Ответы (2)


регулярное выражение будет выглядеть так:

[a-zA-Z0-9_\.+]+@(gmail|yahoo|hotmail)(\.[a-z]{2,3}){1,2}

вы можете добавить все остальные домены, которые хотите ... это вам поможет?

person PierrOz    schedule 23.02.2010
comment
Очевидно, фокус в том, как получить список «всех других доменов». - person Tadeusz A. Kadłubowski; 23.02.2010
comment
@hixster, вы можете принять ответ, не так ли? РЕДАКТИРОВАТЬ: Я проголосовал за ваш вопрос, так что теперь у вас достаточно очков, чтобы проголосовать за кого угодно. - person Bart Kiers; 23.02.2010
comment
-1: [email protected] и я прописываю ваше регулярное выражение как использование платной службы. Пожалуйста, люди, не забывайте, что + - допустимый символ в адресе электронной почты. - person Andrew Moore; 23.02.2010
comment
Кроме того, [email protected] является допустимым псевдонимом для [email protected], поэтому он также будет проходить через указанное выше регулярное выражение. - person nikola; 23.02.2010
comment
@prometheus: адреса .co.uk правильно анализируются указанным выше регулярным выражением. Обратите внимание на _2 _... (точка) (от 2 до 3 букв) (повторяется 1 или дважды). - person Andrew Moore; 23.02.2010
comment
Хорошо, как мне предотвратить попадание в домен .co.uk? - person user279464; 23.02.2010
comment
@Tadeusz: Я не уверен, что вы можете найти домены автоматически без списка конфигураций или чего-то подобного. По крайней мере, я думал, что вопрос был больше о регулярном выражении (см. Тег) @Andrew: мой плохой ... но -1 жесткий, нюхает ... :( - person PierrOz; 23.02.2010
comment
@hixster: ха-ха, это скользкая дорожка, о которой я упоминал ранее. Вы будете беспокоиться о бесплатной электронной почте в Парагвае сразу после знакомства с Великобританией. Надежно решить эту проблему невозможно. Сколько денег ваш клиент готов потратить на раздражающих пользователей Gmail, которые могут захотеть иметь дело с системой? - person Tadeusz A. Kadłubowski; 23.02.2010
comment
@PierrOz: Точно, должен быть какой-то вручную созданный список конфигураций. И список конфигураций всегда будет неполным. Неполное решение бессмысленной проблемы, заданной каким-то остроконечным боссом. - person Tadeusz A. Kadłubowski; 23.02.2010
comment
@PierrOz: факт в том, что вам даже не нужно проверять, что перед @ ... Лично я бы просто пошел на @(yahoo|google|hotmail)(\.[a-z]+)+$ - person Andrew Moore; 23.02.2010
comment
я бы бросил (\.[a-z]+) и изменил все выражение на простое /\@(yahoo|google|hotmail)\./, чтобы оно могло поймать .co.uk - person bcosca; 24.02.2010

Вы пробовали старый большой дизъюнкции?

i.e.

yahoo\.com|googlemail\.com|blah\.net

Плюсы: Легкость сборки, легкость чтения, ясность.

Минусы: Может быть, не самый эффективный механизм.

person brabster    schedule 23.02.2010
comment
На самом деле, если бы он использовал Perl v5.10, это было бы очень эффективно. Это потому, что это становится деревом. - person Brad Gilbert; 25.02.2010
comment
Хммм, раньше не встречал "трие" - очень интересно, спасибо за комментарий !! - person brabster; 25.02.2010