#regex #forms #validation #email #email-validation
#регулярное выражение #формы #проверка #Адрес электронной почты #проверка электронной почты
Вопрос:
Я хочу проверить текст, введенный в поле формы. Текст должен быть действительным адресом электронной почты и не должен содержать определенного домена между знаками «@» и «.». Как я могу сделать это с помощью регулярных выражений? Например, мне нужно электронное письмо, которое не должно содержать «тестовый» домен
mail@mail => Invalid
mail@test.com => Invalid (Because contain 'test' domain)
mail@mail.com => Valid
HTML
<form>
<input type="text" id="email">
<button type="submit" id="sendMail">Send</button>
</form>
Я могу обрабатывать действительную электронную почту по следующему шаблону:
JS
const btn = document.getElementById('sendMail');
btn.addEventListener('click', (e) => {
e.preventDefault();
const emailPtrn = /^(([^<>()[]\.,;:s@"] (.[^<>()[]\.,;:s@"] )*)|(". "))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9] .) [a-zA-Z]{2,}))$/;
const email = document.getElementById('email');
alert(emailPtrn.test(email.value));
});
Как я могу проверить это с помощью одного шаблона?
Ответ №1:
Просто добавьте (?!test.)
отрицательный прогноз после @
в ваше текущее регулярное выражение,
^(([^<>()[]\.,;:s@"] (.[^<>()[]\.,;:s@"] )*)|(". "))@(?!test.)(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9] .) [a-zA-Z]{2,}))$
^^^^^^^^^^ This will reject any email if what follows immediately after @ is test.
Комментарии:
1. Спасибо, Пушпеш Кумар Раджванши
2. Если я проверю только «test.com » нужно ли мне писать (?!test.com .) Если пользователь пишет «test.com.de » действителен , но только для записи «test.com » является недействительным?
3. Если вы только и только хотите отклонить домен, если он есть
test.com
, но хотите разрешитьtest.com.de
, тогда негативный прогноз должен быть(?!test.com$)
4. спасибо, но я не мог использовать этот шаблон. Он отклоняет как .com, так и com.de
5. Извините, я ввел неправильно. Это работает как шарм. Еще раз спасибо.