Подтвердить что ты не робот

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

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

test
test2
[email protected]
[email protected]
test392
[email protected]

и т.д.

Мне нужно сделать так, чтобы $useremail проверял $user, чтобы найти, является ли это адресом электронной почты. Поэтому я могу ОБНОВИТЬ значения, WHERE user=test OR [email protected] и т.д.

$user = strtolower($olduser);
$useremail = "";

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

Ответ 1

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

<?php
    if(filter_var("[email protected]", FILTER_VALIDATE_EMAIL)) {
        // valid address
    }
    else {
        // invalid address
    }
?>

Ответ 2

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

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

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

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

Ответ 3

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

<?php 
$email = "[email protected]"; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{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: для более точных выражений, пожалуйста, обратитесь к ответу Тревиса по этому вопросу

Ответ 4

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

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

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

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

Ответ 5

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

function validate_email($email) {
    return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\[email protected])|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true;
}

Ответ 6

$user_email = "[email protected]";

function isEmail($user) {
     if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{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");
}

Ответ 7

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

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

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

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

Ответ 8

Поскольку все публикуют свое регулярное выражение, здесь мое: ^((([\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, включая многие вещи, которые обычно не включают большинство людей.

Ответ 9

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

function checkEmail($email) {
   if ( strpos($email, '@') !== false ) {
      $split = explode('@', $email);
      return (strpos($split['1'], '.') !== false ? true : false);
   }
   else {
      return false;
   }
}

$email = '[email protected]';
$check = checkEmail('[email protected]');
if ( $check ) {
   echo $email . ' looks like a valid email.';
}

Ответ 10

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.';
} 

Ответ 11

$user_email = "[email protected]";

function isEmail($email) {
     if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
          return true;
     } else {
          return false;
     }
}

if (isEmail($user_email)) {
     // email is ok!
} else {
     // email not ok
}