Лучшая функция проверки электронной почты в целом и в частности (домен колледжа)?


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

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

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

Author: Ben, 2011-06-04

7 answers

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

   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

 23
Author: Chris Baker, 2011-06-03 21:40:51

Если вы действительно хотите убедиться, что ваша форма регистрации действительна, отправьте им электронное письмо с 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

 2
Author: diggersworld, 2011-06-03 21:42:10

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

if (preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])@mycollege.edu$/', $email)) {
     // Valid
}
 0
Author: Fase, 2011-06-03 21:35:32

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

Или короче

var_dump(filter_var('[email protected]', FILTER_VALIDATE_EMAIL));
 0
Author: azat, 2011-06-03 21:43:12

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

$email = "[email protected]";

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
Author: , 2015-09-08 14:19:28

Для любого электронного письма

([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 = '[email protected]';
preg_match('/^([a-zA-Z0-9_-]+)(@mycollege.edu)$/i', $email, $matches);

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

var_dump($matches);
 0
Author: Tahir Əsədov, 2016-01-07 14:54:02

Простая функция, использующая 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
Author: thelightings, 2016-08-21 04:08:43