我有这个正则表达式:
^((?>[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);
答案 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:
(^[^ ]+@[^ ]+\.[^ ].+$)
进一步让我们也抓住这个名字:
^(.*?) *(<[^ ]+@[^ ]+\.[^ ].+>)$
答案 2 :(得分:0)
尝试,
$ emailRegex =“/([\\\\\] +)\&lt;(\\ t +([ - +。'] \\ n + +) @ \ w+([ - 。] \ w+) \ W +([ - ] \ W +)*)/ I“;
我希望这会对你有所帮助
答案 3 :(得分:0)
如果PHP's imap_rfc822_parse_adrlist
完全你需要的话,我不会写自定义函数。