正则表达式解析电子邮件表单"收件人"字段

Bil*_*ami 5 php regex email-validation

如果有一个可以处理这个问题的正确的正则表达式模式,那么从一个来自电子邮件表单"To"行的字符串中提取电子邮件地址是什么,它允许用逗号分隔地址",",分号";" ,空格或三者的任意组合.正则表达式还必须能够忽略"噪声"文本,例如,如果地址包含在"<"和">"字符中,或者在电子邮件地址旁边有实际名称.例如,从To字段中的此字符串:

"Joe Smith" <jsmith@example.com>, kjones@aol.com; someoneelse@nowhere.com mjane@gmail.com
Run Code Online (Sandbox Code Playgroud)

该模式应该能够返回以下匹配:jsmith @ example,kjones @ aol.com,someoneelse @ nowhere.com,mjane @ gmail.com

我正在使用PHP,所以如果这不能在单个正则表达式中完成,那么我肯定会对其他基于PHP的解决方案开放.

谢谢

Tim*_*ker 6

尝试

\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b
Run Code Online (Sandbox Code Playgroud)

(由RegexBuddy提供)如

preg_match_all('/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/i', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];
Run Code Online (Sandbox Code Playgroud)

请注意/i修饰符使其不区分大小写.

另请参阅此问题,以解释正则表达式在字符串中查找电子邮件地址的缺点.

  • 谢谢你允许在我的电子邮件地址中添加"+"...最近我遇到了一些不允许它的注册表单......真让我烦恼. (3认同)