Проверка ввода электронной почты в форме с использованием PHP - PullRequest
0 голосов
/ 22 сентября 2011

Я создаю форму в PHP, которая содержит поле под названием электронная почта, где пользователю необходимо ввести свой электронный идентификатор.Чтобы убедиться, что введенный почтовый идентификатор является подлинным с точки зрения синтаксиса (например, username_123@domain.com действителен), мне нужно добавить к нему некоторую проверку.Я нахожу ситуацию довольно туманной, так как не понимаю, как проверить, содержит ли введенный почтовый идентификатор символ @ и т. Д. Пожалуйста, помогите.Благодарю.:)

Ответы [ 5 ]

8 голосов
/ 22 сентября 2011

Лучшее решение - просто сделать:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
   ...
}

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

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

для строгого соответствия RFC2822.

2 голосов
/ 22 сентября 2011

Сначала вам нужно определить действительный адрес электронной почты .

Существуют различные подходы к этому в зависимости от того, насколько важна для вас эта проверка.

Некоторые люди используют сумасшедшие регулярные выражения RFC.

Другой крайний вариант - сохранить все введенные пользователем данные, а затем попытаться отправить электронное письмо с подтверждением на этот адрес.Нет подтверждения = плохой адрес электронной почты.

Возможно, вы захотите что-то среднее: убедитесь, что в середине есть @, например:

$email_arr = explode('@', $email);
if (sizeof($email_arr) !== 2 || $email_arr[0] == '' || $email_arr[1] == '')
    ... // definitely not valid

UPD: Марк Б прибил его с filter_var($email, FILTER_VALIDATE_EMAIL) Это, наверное, лучший способ.

1 голос
/ 22 сентября 2011

Вы можете использовать регулярные выражения для проверки формата:

<?php  

$email = "someone@example.com";  // or perhaps $_POST['email'];

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://php.net/manual/en/function.eregi.php

0 голосов
/ 22 сентября 2011

Из моего собственного кода:

if( !preg_match( "(^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$)i", $email))
    echo "E-mail address invalid";

Может произойти сбой очень небольшого числа допустимых адресов, например, любого @example.info, и любого адреса электронной почты, который использует необычные символы, но по большей части это работает хорошо.

0 голосов
/ 22 сентября 2011

Вы можете использовать форму подтверждения плагина jquery.

http://docs.jquery.com/Plugins/Validation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...