2016-01-22 3 views
0

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

<?php 
    $okay = preg_match(
     '/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/', 
     "[email protected]" 
    ); 
    echo $okay; 
?> 
+0

Делайте то, что написал Том. Не изобретайте, что уже там и работает. Но только для того, чтобы ответить, почему ваше регулярное выражение не удалось: вы не разрешили точки '\ .'. – MyBrainHurts

+1

Выражения в скобках @MyBrainHurts не нужны экранирующие точки: '/^[A-z0-9 _ \ -.] + [@] [A-z0-9 _ \ -] + ([.] [A-z0-9_ \ -] +) + [Az.] {2,4} $/'(обратите внимание на добавленную точку в конце первой скобки) – AlexBay

+1

@AlexBay Совершенно верно - я хотел убедиться, что он не путается с дикая карта. Должен был написать это по-своему! – MyBrainHurts

ответ

2

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

<?php 
    $email_a = '[email protected]'; 
    $email_b = 'Random words'; 

    if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) { 
     echo "This ($email_a) email address is considered valid."; 
    } 
    if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) { 
     echo "This ($email_b) email address is considered valid."; 
    } 
?> 

Более подробно об этом можно найти здесь:
http://php.net/manual/en/function.filter-var.php
http://php.net/manual/en/filter.examples.validation.php