Проверьте, является ли строка адресом электронной почты в PHP

Я пытаюсь выполнить SQL-запрос, но мне нужно как-то проверить, является ли значение адресом электронной почты. Мне нужен способ проверить, является ли $user адресом электронной почты, потому что у меня есть такие значения пользователя, как это в моей таблице.

 test test2 test@example.com test2@example.com test392 test@example.net 

и так далее…

Мне нужно сделать так, чтобы $useremail проверял $user чтобы узнать, является ли это адресом электронной почты. Поэтому я могу ОБНОВЛЯТЬ значения, WHERE user=test OR user=test@example.com и т. Д.

 $user = strtolower($olduser); $useremail = ""; mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$useremail"); 

Без регулярных выражений:

 <?php if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) { // valid address } else { // invalid address } ?> 

Самый простой подход – использовать регулярное выражение для проверки адресов электронной почты, хотя есть некоторые разногласия относительно того, насколько это точно. Этот процесс подробно обсуждается здесь:

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

Вы можете использовать REGEXP в MySQL для выбора из базы данных на основе вашего регулярного выражения:

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

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

 <?php $email = "someone@example.com"; if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[az]{2,3})$", $email)) { echo "Valid email address."; } else { echo "Invalid email address."; } ?> 

От: http://www.totallyphp.co.uk/code/validate_an_email_address_using_regular_expressions.htm

EDIT : для более точных выражений, пожалуйста, обратитесь к ответу Тревиса по этому вопросу

Эта функция is_email () даст вам определенный ответ на то, является ли строка допустимым адресом электронной почты или нет. Насколько я знаю, никакое другое решение не сделает этого с одинаковым уровнем власти.

Если я правильно понял пример, вы бы использовали его так

 $user = strtolower($olduser); $useremail = (is_email($user)) ? $user : ''; 

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

Я использую эту функцию много лет на сотнях сайтов. Это, наверное, не идеально, но у меня никогда не было жалобы на ложные негативы (или положительные моменты):

 function validate_email($email) { return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true; } 
 $user_email = "email@string.com"; function isEmail($user) { if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[az]{2,3})$", $email)) { return true } else { return false } } if (isEmail($user_email)) { // email is valid, run the query mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$user_email"); } 

Поскольку все публикуют свое регулярное выражение, вот мой: ^((([\w+-]+)(.[\w+-]+)*)|(\"[^(\|\")]{0,62}\"))@(([a-zA-Z0-9-]+.)+([a-zA-Z0-9]{2,})|[?([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}]?)$

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

Помимо всех предложений регулярных выражений, которые в основном не поддерживают все доступные TLD (включая, например, .info и .museum ), и предстоящее решение ICANN разрешить использование китайского и арабского языков в URL-адресах (что дало бы [az] и \w потерпеть неудачу) для которого достаточно следующего более общего регулярного выражения

 ([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+) 

Я также хотел бы упомянуть, что выполнение WHERE user=test OR user=test@example.com слишком подвержено ошибкам. Лучше использовать автогенерированный ПК в таблице и использовать его в WHERE .

Я действительно не вижу значения строгих, длинных и нечитаемых сообщений mailregexes, соответствующих спецификациям RFCxxxx. Лучшим способом по-прежнему является отправка почты со ссылкой с ключом активации конечному пользователю, чтобы он подтвердил адрес электронной почты. Сообщите об этом и в форме. При необходимости пусть пользователь вводит адрес электронной почты дважды, как и для паролей.

Это не отличный метод и не проверяет, существует ли почта, но он проверяет, похоже ли это на электронную почту с расширением @ и домена.

 function checkEmail($email) { if ( strpos($email, '@') !== false ) { $split = explode('@', $email); return (strpos($split['1'], '.') !== false ? true : false); } else { return false; } } $email = 'my@email.com'; $check = checkEmail('my@email.com'); if ( $check ) { echo $email . ' looks like a valid email.'; } 
 if(filter_var($email, FILTER_VALIDATE_EMAIL)) { echo 'This is a valid email address.'; echo filter_var($email, FILTER_VALIDATE_EMAIL); //exit("E-mail is not valid"); } else { echo 'Invalid email address.'; } 
 $user_email = "email@gmailcom"; function isEmail($email) { if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[az]{2,3})$", $email)) { return true; } else { return false; } } if (isEmail($user_email)) { // email is ok! } else { // email not ok }