名称和姓氏的电子邮件正则表达式验证
Email Regex Validation for Name and Surname
我正在尝试验证一些电子邮件地址。
电子邮件地址可以采用以下格式:-
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 个正则表达式,每个都用于测试场景。
所以我有以下场景的正则表达式
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),以便它也可以验证多个名字和姓氏?
感谢您的帮助和时间
这个正则表达式可以做到(包括变音符号):
/^(([().!#$%&'*+\/=?^_`{|}~\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,}
。这是一个压缩版本,因为我们不需要区分名字和姓氏。
<>
包含在非捕获组中,应该出现零次或一次。
/(([().!#$%&'*+\/=?^_`{|}~\u00BF-\u1FFF\u2C00-\uD7FF\w-]+[,\n#\s$&:\n\t]+){2,}){0,}/
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");
}
});
div.match {
color: #ff0000;
}
<div>test@test.com</div>
<div><test@test.com></div>
<div>Näme Surmame <test@test.com></div>
<div>Name, Surname <test@test.com></div>
<div>Name 北京市 Surname surname2 Surname3 <test@test.com></div>
<div>Name (name 2), Surname-surname2 <test@test.com></div>
<div>Name <test@test.com></div>
<div>test @test.com</div>
<div>isthis3avalid test <test@test></div>
</textarea>
我试图通过尽可能使用 \w
来简化匹配,并使用 À-ÿ
来匹配所有重音字符。它可能会匹配一些你可能不会考虑的字符 "valid",但你为什么要成为那个的绝对判断者......或者如果你认为你需要,那么你可以用列表替换它所有你会接受的。
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");
}
我正在尝试验证一些电子邮件地址。
电子邮件地址可以采用以下格式:-
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 个正则表达式,每个都用于测试场景。
所以我有以下场景的正则表达式
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),以便它也可以验证多个名字和姓氏?
感谢您的帮助和时间
这个正则表达式可以做到(包括变音符号):
/^(([().!#$%&'*+\/=?^_`{|}~\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,}
。这是一个压缩版本,因为我们不需要区分名字和姓氏。
<>
包含在非捕获组中,应该出现零次或一次。
/(([().!#$%&'*+\/=?^_`{|}~\u00BF-\u1FFF\u2C00-\uD7FF\w-]+[,\n#\s$&:\n\t]+){2,}){0,}/
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");
}
});
div.match {
color: #ff0000;
}
<div>test@test.com</div>
<div><test@test.com></div>
<div>Näme Surmame <test@test.com></div>
<div>Name, Surname <test@test.com></div>
<div>Name 北京市 Surname surname2 Surname3 <test@test.com></div>
<div>Name (name 2), Surname-surname2 <test@test.com></div>
<div>Name <test@test.com></div>
<div>test @test.com</div>
<div>isthis3avalid test <test@test></div>
</textarea>
我试图通过尽可能使用 \w
来简化匹配,并使用 À-ÿ
来匹配所有重音字符。它可能会匹配一些你可能不会考虑的字符 "valid",但你为什么要成为那个的绝对判断者......或者如果你认为你需要,那么你可以用列表替换它所有你会接受的。
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");
}