如何使用正则表达式执行电子邮件控制和自定义域控制?

问题描述 投票:1回答:1

我想检查输入表单字段的文本。文本必须是有效的电子邮件,不应包含“@”和“。”之间的特定域。标志。如何使用正则表达式执行此操作?例如,我想要一封不应包含“test”域名的电子邮件

mail@mail => Invalid 
[email protected] => Invalid (Because contain 'test' domain)
[email protected] => 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

如何用单一图案检查?

regex forms validation email email-validation
1个回答
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.

Regex Demo

© www.soinside.com 2019 - 2024. All rights reserved.