RegEx Frage

Begonnen von dobra, Mai 19, 2009, 17:19:25

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

Hallo,

ich habe nachgebaute "Inline Fehlermeldungen mit Bedingung" bei denen 2 mail Adressen überprüft werden sollen.
das funktioniert genau so wie es soll  :D
die mail Prüfung ist nur grob, reicht aber für diesen Zweck im Prinzip aus.
eine Bedingung würde ich allerdings sehr gerne noch dazu nehmen:
kein "www." am Anfang, da ich diesen Fehler bei meinen Kunden immer wieder habe

bei meiner Suche im web habe ich eine lustige Definition gefunden
ZitatWenn man in einem Script etwas sieht, das so aussieht, als wenn der Programmierer eingeschlafen und mit dem Kopf auf die Tastatur gefallen ist, dann hat man wahrscheinlich RegEx gefunden
aber leider keine Lösung wie ich eine zusätzliche Prüfung auf www (also Adressen wie www.name@domain.xx) einbauen kann.

mein einschlafundmitKopfaufTastaturfall Code schaut jetzt so aus:
if ($mail !~  /^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/)   {$fehler = qq|fehler1=mail1f|;}

kann mir da bitte jemand helfen?
mfG
dobra

ahe


if ($mail !~  /^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/)   {$fehler = qq|fehler1=mail1f|;}
if ($mail =~ /^www\./i) {$fehler = qq|fehler1=mail1f|;}


8)
MfG ahe

dobra

#2
Hallo ahe,

Danke
so geht's natürlich auch ;)
nachdem ich aber noch einige komplexere Bedingungen mit mehreren verschachtelten && und || habe, wollte ich die www Prüfung eigentlich integriert und nicht separat machen...

Nachtrag:
hab's geschafft  :D
SO werden jetzt alle Bedingungen und Fehlermeldungen mit Prüfung auf www. korrekt verarbeitet:
my $fehler;
if ($nachricht ne "3" &&  !length($mail)) { $fehler = qq|fehler1=mail1|;}
if (($nachricht ne "3" && length($mail) && $mail !~  /^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/) || $mail =~ /^www./i)   {$fehler = qq|fehler1=mail1f|;}
if ($antwort ne "2" && !length($absender)) { $fehler = qq|fehler2=mail2|;}
if (($antwort ne "2" && length($absender) && $absender !~  /^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/) || $absender =~ /^www./i)  {$fehler = qq|fehler2=mail2f|;}
if (($nachricht ne "3" && length($mail ) < 8)  && ($antwort ne "2" &&  length($absender ) < 8) )  {  $fehler = qq|fehler1=mail1&fehler2=mail2|;}

if (($nachricht eq "3" || ($mail =~ /^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/ && $mail !~ /^www./)) && ($antwort eq "2" || ($absender =~ /^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/ && $absender !~ /^www./)) ){

my $ok = qq|UPDATE $table SET SCHREIBEN = '$schreiben',FREISCHALTEN = '$frei',ANTWORTEN = '$antwort',NACHRICHT='$nachricht',A_FREI = '$commfrei',AEMAIL='$mail',ABSENDER='$absender'|;
ssp::exec_sql($ok, 1);
my $err = ssp::get_last_sqlerr();
if (!$err) {$errmsg = "Die Änderungen wurden gespeichert"; }
}
else {
use CGI qw(:standard);
print redirect(
-URL => "$ssp::xxpath?showbynamebl_global,__xxsession__,,,$fehler",
);
}


mfG
dobra

ahe

Hallo dobra,

für solche Anwendungsfälle wurden in der Programmierung die Funktionen erfunden ;)


sub is_valid_email {
    my $mail = shift;
    return ($mail =~ /^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$/ && $mail !~ /^www./);
}   


Dann brauchen Sie nicht mitten im Code jedes mal den ganzen regulären Ausdruck mit && / || Verknüpfung zu schreiben sondern zb


if (($nachricht ne "3" && length($mail) && !is_valid_email($mail))   {$fehler = qq|fehler1=mail1f|;}   
MfG ahe

dobra

Hallo ahe,

vielen Dank!!!
ich muß halt noch viiiiiiiieeeeeel lernen....
mfG
dobra