如何在PHP中运行此正则表达式来解析带有名称的完整电子邮件地址?

时间:2014-01-16 19:55:19

标签: php regex

我有这个正则表达式:

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$

假设要解析包含名称和所有内容的完整电子邮件,我无法让它在PHP中运行,请帮忙吗?

以下是我的尝试:

$test = "Joe Doe <doe@example.com>";
$emailRegex = '@^((?>[a-zA-Z\d!#$%&\'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&\'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$@';
preg_match($emailRegex, $test, $curResult);
print_r($curResult);

4 个答案:

答案 0 :(得分:3)

在PHP中你不需要像这样的怪物正则表达式,你可以使用内置的验证器:http://www.php.net/manual/en/filter.examples.validation.php

例如,只会执行第一个echo

<?php
$email_a = 'joe@example.com';
$email_b = 'bogus';

if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
    echo "This ($email_a) email address is considered valid.";
}
if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) {
    echo "This ($email_b) email address is considered valid.";
}
?>

答案 1 :(得分:1)

保持简单。我们知道我们可以将其用于validate almost any email address in an uncomplicated way

(^[^ ]+@[^ ]+\.[^ ].+$)

进一步让我们也抓住这个名字:

^(.*?) *(<[^ ]+@[^ ]+\.[^ ].+>)$

http://regex101.com/r/wT6uX8

答案 2 :(得分:0)

尝试,

  

$ emailRegex =“/([\\\\\] +)\&lt;(\\ t +([ - +。'] \\ n + +) @ \ w+([ - 。] \ w+) \ W +([ - ] \ W +)*)/ I“;

我希望这会对你有所帮助

答案 3 :(得分:0)

如果PHP's imap_rfc822_parse_adrlist 完全你需要的话,我不会写自定义函数。

相关问题