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($email0$atIndex);
      
$localLen strlen($local);
      
$domainLen strlen($domain);
      if (
$localLen || $localLen 64)
      {
         
// local part length exceeded
         
$isValid false;
      }
      else if (
$domainLen || $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($emailFILTER_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.