首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >姓名和姓氏的电子邮件正则表达式验证

姓名和姓氏的电子邮件正则表达式验证
EN

Stack Overflow用户
提问于 2020-01-10 21:24:37
回答 2查看 459关注 0票数 2

我正在尝试验证一些电子邮件地址。

电子邮件地址可采用以下格式:-

代码语言:javascript
复制
1)test@test.com
2)<test@test.com>
3) Name Surmame <test@test.com>
4) Name, Surname <test@test.com>
5) Name(multiple) Surname(multiple) <test@test.com>
6) Name(multiple), Surname(multiple) <test@test.com>

到目前为止,我已经成功地验证了前4个场景,但是我坚持验证最后一个场景。

到目前为止,我已经构造了4个正则表达式,每个正则表达式都用于测试场景。

因此,对于这些场景,我有以下正则表达式

代码语言:javascript
复制
1) /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
2) /^<[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?>)*$/
3) /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+[\n# $&:\n\t]+[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+[\n# $&:\n\t]+<[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?>)*$/
4) /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+[\n# $&:\n\t]+[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+[\n# $&:\n\t]+<[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?>)*$/

是否可以操作最后一个正则表达式(4),使其也可以验证多个姓名和姓氏?

感谢您的帮助和时间

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-10 22:19:56

此正则表达式可以做到这一点(包括变音符号):

代码语言:javascript
复制
/^(([().!#$%&'*+\/=?^_`{|}~\u00BF-\u1FFF\u2C00-\uD7FF\w-]+[,\n#\s$&:\n\t]+){2,}){0,}(?:<){0,1}[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9]))(?:>){0,1}$/igm

以下行检查名称,包括发音符号\u00BF-\u1FFF\u2C00-\uD7FF\w- (而不是电子邮件)。它被包装在一个捕获组中,该捕获组将评估是否有任何名称。如果有名称,第二个捕获组将检查是否至少有两个{2,}。它是一个压缩版本,因为我们不需要区分名字和姓氏。

<>被封装在非捕获组中,应该出现零次或一次。

代码语言:javascript
复制
/(([().!#$%&'*+\/=?^_`{|}~\u00BF-\u1FFF\u2C00-\uD7FF\w-]+[,\n#\s$&:\n\t]+){2,}){0,}/

代码语言:javascript
复制
const regEx = /^(([().!#$%&'*+\/=?^_`{|}~\u00BF-\u1FFF\u2C00-\uD7FF\w-]+[,\n#\s$&:\n\t]+){2,}){0,}(?:<){0,1}[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9]))(?:>){0,1}$/ig;
const emails = document.querySelectorAll("div");

emails.forEach(element => {
  if (element.textContent.match(regEx))
  {
    element.classList.add("match");
  }
});
代码语言:javascript
复制
div.match {
  color: #ff0000;
}
代码语言:javascript
复制
<div>test@test.com</div>
<div><test@test.com></div>
<div>Näme Surmame &lt;test@test.com&gt;</div>
<div>Name, Surname &lt;test@test.com&gt;</div>
<div>Name 北京市 Surname surname2 Surname3 &lt;test@test.com&gt;</div>
<div>Name (name 2), Surname-surname2 &lt;test@test.com&gt;</div>
<div>Name &lt;test@test.com&gt;</div>
<div>test @test.com</div>
<div>isthis3avalid test &lt;test@test&gt;</div>
</textarea>

票数 1
EN

Stack Overflow用户

发布于 2020-01-10 22:33:35

为了简化匹配,我尽可能多地使用\w,并使用À-ÿ来匹配所有重音字符。它可能会匹配一些你可能认为不“有效”的字符,但为什么你要成为这一点的绝对判断呢……或者,如果您认为您需要这样做,那么您可以将其替换为您可以接受的所有列表。

代码语言:javascript
复制
var strings = [
  "test@test.com",
  "<test@test.com>",
  "Name Surname <test@test.com>",
  "Náme Sùrname <test@test.com>",
  "Name, Surname <test@test.com>",
  "Namë, Surnáme <test@test.com>",
  "Name and more Surname and more <test@test.com>",
  "Namë or2 móre Surname and more <test@test.com>",
  "Name or! more, Surname and more <test@test.com>",
  "Ñame or. möre, Surname ánd more <test@test.com>"
];
var regexes = [
  /^[\w]+@[\w]+(\.[\w]+)+$/,
  /^<[\w]+@[\w]+(\.[\w]+)+>$/,
  /^[\wÀ-ÿ.!#$%&'*+/=?^_`{|}~-]+(,? ?[\wÀ-ÿ.!#$%&'*+/=?^_`{|}~-]+)* <[\w]+@[\w]+(\.[\w]+)+>$/
];

// each string should match at least 1 regex
for (var i = 0; i < strings.length; i++) {
  var allowed = false;
  for (var j = 0; j < regexes.length && !allowed; j++) {
    allowed = strings[i].match(regexes[j]);
    if (allowed)
      console.log("String " + i + " is allowed by regex " + j);
  }
  if (!allowed)
    console.log("String " + i + " is not allowed by any regex");
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59682603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档