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

На земле Mozilla, устанавливая mozBackgroundRequest параметр XMLHttpRequest ( документы ) к истинному подавляет те диалоговые окна и заставляет запросы просто перестать работать. Однако я не знаю, как хорошая перекрестная поддержка браузера (включая то, очень ли качество информации об ошибке о тех неудавшихся запросах хорошо через браузеры.)

54
задан Andy Lester 25 September 2018 в 11:00
поделиться

7 ответов

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

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

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

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

8
ответ дан 7 November 2019 в 07:34
поделиться

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

<?php
    if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) {
        // valid address
    }
    else {
        // invalid address
    }
?>
205
ответ дан 7 November 2019 в 07:34
поделиться

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

<?php 
$email = "someone@example.com"; 
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

РЕДАКТИРОВАТЬ : более точные выражения см. В Ответе Трэвиса на этот вопрос

5
ответ дан 7 November 2019 в 07:34
поделиться

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

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;
}
3
ответ дан 7 November 2019 в 07:34
поделиться

Apart from all regex suggestions which mostly doesn't support all of the available TLD's (including for example .info and .museum) and the upcoming ICANN decision to allow Chinese and Arabic in URL's (which would let [a-z] and \w fail) for which the following more generic regex is sufficient

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

I would also mention that doing a WHERE user=test OR user=test@example.com слишком подвержен ошибкам. Лучше использовать автоматически сгенерированный PK в таблице и использовать его в предложении WHERE .

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

3
ответ дан 7 November 2019 в 07:34
поделиться
$user_email = "email@string.com";

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");
}
2
ответ дан 7 November 2019 в 07:34
поделиться

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

2
ответ дан 7 November 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: