На земле Mozilla, устанавливая mozBackgroundRequest параметр XMLHttpRequest ( документы ) к истинному подавляет те диалоговые окна и заставляет запросы просто перестать работать. Однако я не знаю, как хорошая перекрестная поддержка браузера (включая то, очень ли качество информации об ошибке о тех неудавшихся запросах хорошо через браузеры.)
Самый простой подход - это используйте регулярное выражение для проверки адресов электронной почты, хотя там есть некоторые разногласия по поводу того, насколько это может быть точным. Этот процесс подробно обсуждается здесь:
Использование регулярного выражения для проверки адреса электронной почты
Вы можете использовать REGEXP в MySQL для выбора из базы данных на основе вашего регулярного выражения:
http: //dev.mysql .com / doc / refman / 5.1 / en / regexp.html
Без регулярных выражений:
<?php
if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) {
// valid address
}
else {
// invalid address
}
?>
Вы можете использовать регулярные выражения для проверки введенной строки, чтобы узнать, соответствует ли она адресу электронной почты:
<?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
РЕДАКТИРОВАТЬ : более точные выражения см. В Ответе Трэвиса на этот вопрос
Я был используя эту функцию в течение многих лет на сотнях сайтов. Возможно, он не идеален, но у меня никогда не было жалоб на ложноотрицательные (или положительные):
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;
}
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. Лучшим способом по-прежнему является отправить конечному пользователю письмо со ссылкой с ключом активации, чтобы он мог подтвердить адрес электронной почты. Сообщите и об этом в форме. При необходимости позвольте пользователю ввести адрес электронной почты дважды, как вы это делаете для паролей.
$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");
}
Поскольку все публикуют свое регулярное выражение, вот мое:
^ ((([\ 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, включая многие вещи, которые обычно не включаются.