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 запрос на сервер для проверки в реальном времени - тогда точно будет одинаково.