Как я могу управлять как электронной почтой, так и пользовательским контролем домена с помощью regex? - PullRequest
1 голос
/ 17 апреля 2019

Я хочу проверить текст в поле формы. Текст должен быть действительным адресом электронной почты и не должен содержать определенный домен между "@" и "." знак. Как я могу сделать это с помощью регулярных выражений? Например, я хочу письмо, которое не должно содержать «тестовый» домен

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 Link

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

1 Ответ

1 голос
/ 17 апреля 2019

Просто добавьте (?!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.

Regex Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...