Как обеспечить одинаковую проверку email на клиенте и сервере JavaScript

Проблема разночтений в проверке email

У меня разные механизмы валидации email адресов на клиенте и на сервере, и это создает сложности.

Валидация на сервере (PHP):

if (!filter_var($new_email, FILTER_VALIDATE_EMAIL)) {
    $validation_errors .= "Неверный email,";
    $is_valid = false;
}

Валидация на клиенте (JavaScript):

function validateEmail(emailId){
    var emailValue = document.getElementById(emailId).value;
    var emailRegex = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9]+\.[a-zA-Z]{1,4}$/;
    return emailRegex.test(emailValue);
}

Проблема: JavaScript принимает email формата username@domain без точки и домена верхнего уровня как корректный. Хотелось бы, чтобы валидация на обеих сторонах была одинаковой.

Как изменить регулярное выражение в JavaScript для более строгого контроля?

Проблема в твоём регулярном выражении - оно требует минимум одну точку после @ и домен. Проверь: там стоит + после [a-zA-Z0-9], что означает “один или больше символов”. Точка экранирована правильно - \..

Возможно PHP FILTER_VALIDATE_EMAIL просто строже и проверяет, существует ли домен. Попробуй заменить {1,4} на {2,6} в конце - так точнее для реальных доменов типа .com, .info. И добавь проверку, чтобы после точки было минимум 2 символа.

Скинь пример email, который JS воспринимает за правильный, а PHP нет. FILTER_VALIDATE_EMAIL действительно строгий и смотрит не только на формат. Может, проще сделать одну валидацию и вызывать её через API с клиента?

В твоём регексе ошибка - [a-zA-Z0-9]+\.[a-zA-Z]{1,4}$ требует точку и домен. Не стоит изобретать велосипед с регулярками для email. Используй validator.js на клиенте - она повторяет логику серверных валидаторов. Или отправляй AJAX запрос на сервер для проверки в реальном времени - тогда точно будет одинаково.