Autor Thema: RegEx Frage  (Gelesen 6036 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
RegEx Frage
« am: Mai 19, 2009, 17:19:25 »
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
Zitat
Wenn 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?


Linkback: https://www.shoppilot.net/pf/index.php?topic=1248.0
« Letzte Änderung: Mai 19, 2009, 17:32:44 von dobra »
mfG
dobra

Offline ahe

  • Global Moderator
  • Sr. Member
  • *****
  • Beiträge: 435
  • Lob: 20
Re: RegEx Frage
« Antwort #1 am: Mai 20, 2009, 01:07:41 »
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

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Re: RegEx Frage
« Antwort #2 am: Mai 20, 2009, 05:21:37 »
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",
);
}

« Letzte Änderung: Mai 20, 2009, 07:15:46 von dobra »

Offline ahe

  • Global Moderator
  • Sr. Member
  • *****
  • Beiträge: 435
  • Lob: 20
Re: RegEx Frage
« Antwort #3 am: Mai 20, 2009, 08:41:49 »
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|;}   

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Re: RegEx Frage
« Antwort #4 am: Mai 20, 2009, 08:45:00 »
Hallo ahe,

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


xx
Frage zu readme 3.01.01

Begonnen von dobra

2 Antworten
4455 Aufrufe
Letzter Beitrag März 28, 2009, 14:41:08
von dobra
xx
JS Frage zu confirm

Begonnen von dobra

6 Antworten
7295 Aufrufe
Letzter Beitrag Mai 21, 2008, 12:36:16
von dobra
xx
Gutscheine - Frage:

Begonnen von Andi

5 Antworten
6700 Aufrufe
Letzter Beitrag Mai 29, 2005, 12:51:15
von Andi
xx
Staticbuilder Frage

Begonnen von Andi

9 Antworten
8263 Aufrufe
Letzter Beitrag Mai 11, 2007, 16:53:25
von admin