email syntax überprüfen

03/11/2012 17:46 xTrojaner#1
hallo leute,
ich wollte heute ein script schreiben was den syntax der email überprüft
da ich nicht so recht wusste wie ich dies anfangen soll googlte ich dies im internet und traf auf diesese hier:
if(preg_match("/^([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$/",$mail))

nur leider versteh ich das noch nicht so recht ...
was genau macht preg match und wie ist das ganze in der klammer zu verstehen aufgebaut....
Dies hilft mir auch nicht so recht....
[Only registered and activated users can see links. Click Here To Register...]
03/12/2012 08:25 Whoknowsit#2
Einen Regex zu erklären ist in manchen Fällen garnicht so einfach :)

Ich persönlich mach's mittlerweile so:

PHP Code:
function check_email_address($email)
{
   
$isValid = true;
   
$atIndex = strrpos($email, "@");
   if (
is_bool($atIndex) && !$atIndex)
   {
      
$isValid = false;
   }
   else
   {
      
$domain = substr($email, $atIndex+1);
      
$local = substr($email, 0, $atIndex);
      
$localLen = strlen($local);
      
$domainLen = strlen($domain);
      if (
$localLen < 1 || $localLen > 64)
      {
         
// local part length exceeded
         
$isValid = false;
      }
      else if (
$domainLen < 1 || $domainLen > 255)
      {
         
// domain part length exceeded
         
$isValid = false;
      }
      else if (
$local[0] == '.' || $local[$localLen-1] == '.')
      {
         
// local part starts or ends with '.'
         
$isValid = false;
      }
      else if (
preg_match('/\\.\\./', $local))
      {
         
// local part has two consecutive dots
         
$isValid = false;
      }
      else if (!
preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
      {
         
// character not valid in domain part
         
$isValid = false;
      }
      else if (
preg_match('/\\.\\./', $domain))
      {
         
// domain part has two consecutive dots
         
$isValid = false;
      }
      else if(!
preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
                 
str_replace("\\\\","",$local)))
      {
         
// character not valid in local part unless 
         // local part is quoted
         
if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local)))
         {
            
$isValid = false;
         }
      }
      if (
$isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))
      {
         
// domain not found in DNS
         
$isValid = false;
      }
   }
   return 
$isValid;
} 
In vielen aktuellen PHP-Versionen mit entsprechendem PEAR-Paket geht's auch so:

PHP Code:
<?php
$email 
= "[Only registered and activated users can see links. Click Here To Register...]";

if(!
filter_var($email, FILTER_VALIDATE_EMAIL))
  {
  echo 
"E-mail is not valid";
  }
else
  {
  echo 
"E-mail is valid";
  }
?>
03/12/2012 09:36 JPGaming#3
Schön, so viele Möglichkeiten zu sehen, aber ich versichere dir, dass

if(filter_var($email, FILTER_VALIDATE_EMAIL))

funktioniert, wie schon Whoknowsit geschrieben hat.
Mache ich auch so, und denke, einfacher geht es nicht.