2013-03-16 3 views
0

Я довольно новичок в php, поэтому извиняюсь за свои плохие знания, но я использую форму для отправки по электронной почте для регистрации на моей веб-странице, но я получаю ошибки при ее запуске.eregi заменен на preg_match приносит ошибку

полный скрипт выглядит следующим образом:

<?php 
if(isset($_POST['email'])) { 

    // EDIT THE 2 LINES BELOW AS REQUIRED 
    $email_to = "[email protected]"; 
    $email_subject = "New e-mail subscriber"; 


    function died($error) { 
     // your error code can go here 
     echo "We are very sorry, but there were error(s) found with the form your submitted. "; 
     echo "These errors appear below.<br /><br />"; 
     echo $error."<br /><br />"; 
     echo "Please go back and fix these errors.<br /><br />"; 
     die(); 
    } 

    // validation expected data exists 
    if 
     (!isset($_POST['email'])) { 
     died('We are sorry, but there appears to be a problem with the email your submitted.');  
    } 


    $email_from = $_POST['email']; // required 

    $error_message = ""; 
    $email_exp = "/^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/"; 
    if(!preg_match($email_exp,$email_from)) { 
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />'; 
    } 

    if(strlen($error_message) > 0) { 
    died($error_message); 
    } 
    $email_message = "Form details below.\n\n"; 

    function clean_string($string) { 
     $bad = array("content-type","bcc:","to:","cc:","href"); 
     return str_replace($bad,"",$string); 
    } 


    $email_message .= "Email: ".clean_string($email_from)."\n"; 


// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 
?> 

<!-- include your own success html here --> 

Thank you for contacting us. We will be in touch with you very soon. 

<? 
} 
?> 

Сначала я был «eregi амортизируется» ошибка из-за первоначального сценария, который был следующим:

 $error_message = ""; 
    $email_exp = "^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$"; 
    if(!eregi($email_exp,$email_from)) { 
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />'; 
    } 

После прибегая к помощи его я заменил его с:

$error_message = ""; 
    $email_exp = "/^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/"; 
    if(!preg_match($email_exp,$email_from)) { 
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />'; 
    } 

, но теперь это дает мне следующее, хотя адрес электронной почты исправьте:

Мы сожалеем, но были обнаружены ошибки, найденные с формой вашего . Эти ошибки появляются ниже.

Введенный вами адрес электронной почты недействителен.

Пожалуйста, вернитесь и исправьте эти ошибки.

любая помощь будет намного apreciated

+0

Слово совет: Найти более чем на 1 (электронной) форме в Интернете и проверить их. Один обязан работать без сбоев. Там буквально тысячи, многие из которых уже имеют встроенные функции безопасности и проверки. Не ограничивай себя только тем. Ура! –

ответ

1

eregi нечувствителен к регистру, preg_match нет.

Вы должны добавить i в конец рисунка (/..../i).

+0

большое спасибо! – David

0

Не прямой ответ, но если вы хотите, чтобы проверить действительный адрес электронной почты, это намного проще в использовании PHP встроенного в filters:

$email = filter_var($email_from, FILTER_VALIDATE_EMAIL); 

Теперь $email будет содержать блокированные -mail или false, если фильтр не удался (в этом случае недействительный адрес).

-1

Вам следует избегать «.». внутри [], потому что он будет соответствовать каждому символу, если вы не сделать это, вы будете иметь:

"/^[A-Z0-9\._%-][email protected][A-Z0-9\.-]+\.[A-Z]{2,4}$/i" 
+0

Неверно. Только ^, \, - и] метасимволы имеют особое значение внутри [], и их нужно экранировать (^ только если сначала, - только если не последний). –

+0

@Phil Хорошо, но не является ли мое Regex действительным в отношении вашего комментария? –

+0

Вы сделали конкретное утверждение, что «.» должен быть экранирован, потому что он будет соответствовать всем, и это не так. "" внутри [] не имеет специального значения (по крайней мере, в стандартных реализациях регулярного выражения). Это не значит бежать, но этого не требуется. –

Смежные вопросы