gpt4 book ai didi

regex - 正则表达式验证全名与括号中的电子邮件(需要括号)

转载 作者:行者123 更新时间:2023-12-01 08:57:16 24 4
gpt4 key购买 nike

我正在尝试找到一个正则表达式来验证带有名称和电子邮件的文本框输入(电子邮件在尖括号中),即 John Smith <john@smith.com> )。不接受的条目将是 John Smith john@smith.com , 或 "John Smith" <john@smith.com> .

我查看了许多线程,但没有看到一个处理需要尖括号的线程<>。

我看过这个帖子

regular expression for email with name

但要么我需要的信息不存在,要么我无法提取答案。我尝试了第一个答案中建议的正则表达式

^(?:(?:[a-z\d.!#$%&’*+/=?^_`{|}~-]+@[a-z\d-]+(?:\.[a-z\d-]+)*|"?([a-z]| (?! ))+"? )(?:,\s*|$))*$

但我的示例文本没有匹配。

此文本框输入将只接受一个条目(姓名 + 电子邮件)。

感谢您的帮助。

最佳答案

这是回答您问题的实际尝试,因为人们似乎只是盲目地发布 RFC822 正则表达式...

让我们从您提供的初始正则表达式开始:

^(?:(?:[a-z\d.!#$%&’*+/=?^_`{|}~-]+@[a-z\d-]+(?:\.[a-z\d-]+)*|"?([a-z]| (?! ))+"? )(?:,\s*|$))*$

重新格式化:

^
(?:
(?:
[a-z\d.!#$%&’*+/=?^_`{|}~-]+
@
[a-z\d-]+
(?:
\.[a-z\d-]+
)*
|
"?([a-z]| (?! ))+"?
)
(?:,\s*|$)
)*
$

好的,所以我们可以看到它尝试匹配地址和名称列表。这不是我们想要的。我们只提取地址部分:

[a-z\d.!#$%&’*+/=?^_`{|}~-]+
@
[a-z\d-]+
(?:
\.[a-z\d-]+
)*

好的,让我们稍微调整一下,并添加尖括号要求:

<(
[\w.!#$%&’*+/=?^_`{|}~-]+
@
[\w-]+
(?:
\.[\w-]+
)+
)>

现在,只需匹配它前面的名称。假设名称可以包含任何内容。

^
\s*
(.+?)
\s*
<(
[\w.!#$%&’*+/=?^_`{|}~-]+
@
[\w-]+
(?:
\.[\w-]+
)+
)>
\s*
$

这里。看起来不错:Demo .名字在第一组,地址在第二组。

短版:

^\s*(.+?)\s*<([\w.!#$%&’*+\/=?^_`{|}~-]+@[\w-]+(?:\.[\w-]+)+)>\s*$

如果你想更严格,你可以限制名称中允许的字符,让我们只允许字母、数字和空格:

^
\s*
([\p{L}\d\s]+?)
\s*
<(
[\w.!#$%&’*+/=?^_`{|}~-]+
@
[\w-]+
(?:
\.[\w-]+
)+
)>
\s*
$

这消除了引用名称大小写:Demo .

短版:

^\s*([\p{L}\d\s]+?)\s*<([\w.!#$%&’*+\/=?^_`{|}~-]+@[\w-]+(?:\.[\w-]+)+)>\s*$

关于regex - 正则表达式验证全名与括号中的电子邮件(需要括号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26764944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com