Как я могу управлять электронной почтой и пользовательским доменом с помощью регулярных выражений?

#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));

});
 

Ссылка на JSfiddle

Как я могу проверить это с помощью одного шаблона?

Ответ №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. Извините, я ввел неправильно. Это работает как шарм. Еще раз спасибо.