这是我用于验证电子邮件是否“验证”的较新的怪物脚本。你可以喂它奇怪的东西并破坏它,但在生产中它可以处理我遇到的 99.99999999% 的问题。真正来自拼写错误的误报更多。
<?php
$pattern = '!^[^@\s]+@[^.@\s]+\.[^@\s]+$!';
$examples = array(
'email@email.com',
'my.email@email.com',
'e.mail.more@email.co.uk',
'bad.email@..email.com',
'bad.email@google',
'@google.com',
'my@email@my.com',
'my email@my.com',
);
foreach($examples as $test_mail){
if(preg_match($pattern,$test_mail)){
echo ("$test_mail - passes\n");
} else {
echo ("$test_mail - fails\n");
}
}
?>
输出
- email@email.com - 通行证
- my.email@email.com - 通行证
- e.mail.more@email.co.uk - 通行证
- bad.email@..email.com - 失败
- bad.email@google - 失败
- @google.com - 失败
- my@email@my.com - 失败
- 我的电子邮件@my.com - 失败
除非有后视的原因,否则您可以使用 preg_match_all() 匹配字符串中的所有电子邮件。由于您使用的是字符串,因此您需要稍微修改正则表达式:
$string_only_pattern = '!\s([^@\s]+@[^.@\s]+\.[^@\s]+)\s!s';
$mystring = '
email@email.com - passes
my.email@email.com - passes
e.mail.more@email.co.uk - passes
bad.email@..email.com - fails
bad.email@google - fails
@google.com - fails
my@email@my.com - fails
my email@my.com - fails
';
preg_match_all($string_only_pattern,$mystring,$matches);
print_r ($matches[1]);
仅从字符串输出
Array
(
[0] => email@email.com
[1] => my.email@email.com
[2] => e.mail.more@email.co.uk
[3] => email@my.com
)