我有一个模式列表:$allowedTLDS = array(".de", ".at", ".ch", ".org", ".com", ".eu");
现在我有一个像30212622mail@myname.com
这样的字符串,我希望在.com之后删除所有内容以获取普通邮件地址。
到目前为止我写过这个函数:
function extract_correct_email_address($string){
$allowedTLDS = array(".de", ".at", ".ch", ".org", ".com", ".eu");
$foundMatch = false;
$foundTLD = "";
foreach ($allowedTLDS as $tld) {
if (strpos($string, $tld) !== FALSE) {
//found a match
$foundMatch = true;
$foundTLD = $tld;
break 1;
}
}
if($foundMatch){
$str = strtok( $string, $foundTLD).$foundTLD;
return $str;
}
return NULL;
}
现在我有了这些地址,我在右侧获得输出:
input: info@meq.dewww.meq.de output: info@meq.de expected: info@meq.de (this one is correct) input: info@cool-name.de output: info@co.de expected: info@cool-name.de input: something-cool123@nice.decool123.nice.de expected: something-cool123@nice.de
我希望我想归档的内容是可以理解的。我在功能上做错了什么?
答案 0 :(得分:2)
使用这个很好的正则表达式 - 你只需添加TLD:
function extract_correct_email_address($string){
// pattern do match email addresses
$pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.(de|at|ch|org|com|eu)(?:\.[a-z]{2})?/i';
preg_match($pattern, $string, $matches);
if(count($matches[0])<1) {
return null;
}
return $matches[0];
}
// example string
$string = 'fdsaf das D hansi@test.dewww.lol.net franz@gibts.atdasf dasf asd';
var_dump(extract_correct_email_address($string));
结果:
string(15)“hansi@test.de”
当然,您可以将其扩展为用于提取多个电子邮件。而不是matches[0]
而是检查所有匹配。
答案 1 :(得分:1)
你可以试试这个。我只是在“@”之后检查这个部分。可能有人将其命名为“miller.denis@bla.com”,以便.de也会被解析
public function parseMail(){
$string = "something-cool123@nice.decool123.nice.de";
$allowedTLDS = array(".de", ".at", ".ch", ".org", ".com", ".eu");
$mail = explode("@", $string);
foreach ($allowedTLDS as $tld) {
if (strpos($mail[1], $tld) !== FALSE) {
//found a match
$foundTLD = $tld;
dump($mail[1]);
$str = strtok($mail[1], $foundTLD);
return $mail[0].'@'.$str.$foundTLD;
}
}
return NULL;
}
答案 2 :(得分:0)
请尝试使用regexp:
preg_replace('/(\.(de|at|ch|org|com|eu)).*$/', '\1', $email);
只需在括号内添加$allowedTLDS
。
$ php -r "echo preg_replace('/(\.(de|at|ch|org|com|eu)).*$/', '\1', 'info@meq.dewww.meq.de') . PHP_EOL;"
> info@meq.de
$ php -r "echo preg_replace('/(\.(de|at|ch|org|com|eu)).*$/', '\1', 'info@cool-name.de') . PHP_EOL;"
> info@cool-name.de
$ php -r "echo preg_replace('/(\.(de|at|ch|org|com|eu)).*$/', '\1', 'something-cool123@nice.decool123.nice.de ') . PHP_EOL;"
> something-cool123@nice.de