система перестала работать после смены eregi на preg_match

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

Раньше он показывал ошибку как

PHP Fatal error:  Uncaught Error: Call to undefined function eregi() in /app/index.php:27

Это строка 27:

 if (!empty($email) && !preg_match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){
        $err[] = "Invalid email<br>";
    }

Поэтому я изменил eregi на preg_match, но теперь это просто не работает.

<?php
$err=array();

if(count($_POST) > 0)
{

    $name = isset($_REQUEST["name"]) ? trim($_REQUEST["name"]) : "";
    $address = isset($_REQUEST["subject"]) ? trim($_REQUEST["subject"]) : "";
    $country = isset($_REQUEST["country"]) ? trim($_REQUEST["country"]) : "";
    $email = isset($_REQUEST["email"]) ? trim($_REQUEST["email"]) : "";
    $contact_no = isset($_REQUEST["contact_no"]) ? trim($_REQUEST["contact_no"]) : "";
    $budget = isset($_REQUEST["budget"]) ? trim($_REQUEST["budget"]) : "";
    $com_name = isset($_REQUEST["com_name"]) ? trim($_REQUEST["com_name"]) : "";
    $message_text = isset($_REQUEST["message_text"]) ? trim(addslashes($_REQUEST["message_text"])) : "";
    $message_text=htmlentities($message_text,ENT_QUOTES);


    $ipaddress = $_SERVER['REMOTE_ADDR'];
    $date = date("F j, Y, g:i a"); 


    if(empty($name)) $err[]="You must enter your name,";
    if(empty($email)) $err[]="proper email address,";

    if (!empty($email) && !preg_match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){
        $err[] = "Invalid email<br>";
    }
    if(empty($contact_no)) $err[]="proper contact no";

    if(!empty($contact_no) && !(is_numeric($contact_no)) )
    $err[]="Contact No must be in Number<br>";

person That dude    schedule 01.06.2019    source источник
comment
Проголосовали за закрытие как why isn't this code working? Вы сбросили много кода, но почти не объяснили, что этот код должен делать или в чем заключается реальная проблема. Пожалуйста, добавьте формулировку проблемы к вашему вопросу.   -  person Tim Biegeleisen    schedule 01.06.2019
comment
Ваше регулярное выражение выглядит нормально, но вы должны использовать разделители, такие как, например, косая черта / в начале и в конце шаблона preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/"   -  person The fourth bird    schedule 01.06.2019
comment
Проверка адресов электронной почты — это игра в кружки. Ваше регулярное выражение не даст допустимых адресов в любом домене с TLD длиннее 3 символов. Взгляните на эту страницу, поддерживаемую IANA, чтобы увидеть только сколько есть.   -  person    schedule 01.06.2019
comment
Вы переключаетесь с eregi, который нечувствителен к регистру. Вы можете оптимизировать регулярное выражение примерно так: '/^[\w-]+(?:\.[\w-]+)*@[\w-]+(?:\.[a-z0-9-]+)*\.[a-z]{1,12}$/i' с помощью i флаг (без учета регистра). Есть много новых доменов верхнего уровня, и я не буду ограничивать их окончанием на \.[a-z]{2,3}$. На самом деле я бы использовал максимум /^\S+@\S+$/. См. демонстрацию вашей рабочей строки 27.   -  person bobble bubble    schedule 01.06.2019