Лучшая функция проверки электронной почты в целом и конкретная (домен колледжа)? - PullRequest
5 голосов
/ 04 июня 2011

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

  1. Существует ли действительно надежная функция php для проверки электронной почты?

  2. Могу ли я проверить электронную почту?из определенного домена.Я не хочу просто проверять, существует ли домен, потому что я знаю, что www.mycollege.edu уже существует.Действительно ли можно проверить, что у пользователя есть действительный веб-адрес @ mycollege.edu?Спасибо вам!

Ответы [ 7 ]

24 голосов
/ 04 июня 2011

Вот что я использую:

   function check_email_address($email) {
        // First, we check that there's one @ symbol, and that the lengths are right
        if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) {
            // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
            return false;
        }
        // Split it into sections to make life easier
        $email_array = explode("@", $email);
        $local_array = explode(".", $email_array[0]);
        for ($i = 0; $i < sizeof($local_array); $i++) {
            if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
                return false;
            }
        }
        if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
            $domain_array = explode(".", $email_array[1]);
            if (sizeof($domain_array) < 2) {
                return false; // Not enough parts to domain
            }
            for ($i = 0; $i < sizeof($domain_array); $i++) {
                if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
                    return false;
                }
            }
        }

        return true;
    }

РЕДАКТИРОВАТЬ Заменен устаревший ereg на preg_match для соответствия PHP 5.3

2 голосов
/ 04 июня 2011

Если вы действительно хотите убедиться, что она действительна, заполните форму регистрации, отправьте им электронное письмо со ссылкой на URL, по которому они должны щелкнуть для подтверждения.

Таким образом, вы не только знаете, что адрес действителен(потому что получил электронное письмо), но вы также знаете, что владелец аккаунта зарегистрировался (если кто-то еще не знает его логин).

Чтобы убедиться, что он заканчивается правильно, вы можете использовать explode () в'@' и проверьте вторую часть.

$arr = explode('@', $email_address);
if ($arr[1] == 'mycollege.edu')
{
    // Then it's from your college
}

PHP также имеет свой собственный способ проверки адресов электронной почты с использованием filter_var: http://www.w3schools.com/php/filter_validate_email.asp

0 голосов
/ 21 августа 2016

Простая функция с использованием filter_var в php

<?php
function email_validation($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
       echo("$email is a valid email address");
    } else {
       echo("$email is not a valid email address");
    }
}

//Test
email_validation('johnson123');
?>
0 голосов
/ 08 сентября 2015

это может быть лучшим решением. многие уже ответили, хотя это немного отличается.

$email = "info@stakoverflow.com";

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
 echo $email ." is a valid email address";
} else {
  echo $email ." is not a valid email address";
}

Я надеюсь, что этот прост в использовании.

0 голосов
/ 12 августа 2012

для любой электронной почты

([a-zA-Z0-9_-]+)(\@)([a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9]{2,4})(\.[a-zA-Z0-9]{2,4})?

для функции php preg_match

/([a-zA-Z0-9_-]+)(\@)([a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9]{2,4})(\.[a-zA-Z0-9]{2,4})?/i

для @ mycollege.edu

^([a-zA-Z0-9_-]+)(@mycollege.edu)$

для функции php preg_match

/^([a-zA-Z0-9_-]+)(@mycollege.edu)$/i

PHP-код

<?php 

$email = 'tahir_aS-adov@mycollege.edu';
preg_match('/^([a-zA-Z0-9_-]+)(@mycollege.edu)$/i', $email, $matches);

if ($matches) { 
    echo "Matched";
} else {
    echo "Not Matched";
}

var_dump($matches);
0 голосов
/ 04 июня 2011

Читать здесь http://ru2.php.net/manual/en/book.filter.php

или короче

var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
0 голосов
/ 04 июня 2011

Это должно работать:

if (preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])@mycollege.edu$/', $email)) {
     // Valid
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...