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

Posted

技术标签:

【中文标题】如何使用正则表达式进行电子邮件控制和自定义域控制?【英文标题】:How can I do both email control and custom domain control with regex? 【发布时间】:2019-09-07 14:37:18 【问题描述】:

我想检查输入表单域的文本。文本必须是有效的电子邮件,并且不应包含“@”和“.”之间的特定域。标志。如何使用正则表达式做到这一点?例如,我想要一封不应包含“测试”域的电子邮件

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】:

只需在您当前的正则表达式中 @ 之后添加 (?!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

【讨论】:

谢谢 Pushpesh Kumar Rajwanshi 如果我只检查“test.com”,我需要写 (?!test\.com\.) 如果用户写“test.com.de”有效但只写“test.com”无效? 如果您只想并且只想拒绝域,如果它是test.com,但想要允许test.com.de,那么负面展望需要是(?!test\.com$) 谢谢你,但我不能用这种模式。它同时拒绝 .com 和 com.de 对不起,我打错了。它就像一个魅力。再次感谢您。

以上是关于如何使用正则表达式进行电子邮件控制和自定义域控制?的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式在控制器中进行验证

PHP之正则表达式简介与会话控制

软件测试攻略(十六):Jmeter进阶_if控制器&正则表达式提取器

在正则表达式中如何定义变量?

导航控制器和自定义导航控制器

如何在 C# 中读取正则表达式捕获