Thomas Häber: Überprüfung auf bestimmte Zeichen

Hallöle Ihr Leude,

Ich habe mir das Feedback-Formular aus SelfHTMl zum Beispiel genommen und möchte die Eingabe der Email auf bestimmte Zeichen überprüfen. So hatte ich mir vorgenommen den Skalar mit folgender Konstruktion zu überprüfen:

unless {$Email =~ /@/) {
#-->Benutzereingabe falsch<--
}

oder

if {$Email != /@/) {
#-->Benutzereingabe falsch<--
}

Demzufolge sollte eine Benutzerfehlermeldung kommen die dem Nutzer über das fehlende @-Zeichen in seiner Email aufklärt. Weitere Möglichkeiten mit der Überprüfung des Punkts einer EMail könnten dann in diesem Ausdruck noch später hinzugefügt werden.

Den Backslash hatte ich gesetzt damit das @ maskiert ist und nicht als irgend ein Befehl verstanden wird, jedenfalls funktionieren beide Möglichkeiten nicht. Ich hatte auch schon daran gedacht das ich numerische Vergleiche genutzt habe, das hat sich jedoch nicht bestätigt da das ja allgemeine reguläre Ausdrücke sind.

Kann man das so machen?

Vielen Dank

MfG
Thomas

  1. hi!

    Ich habe mir das Feedback-Formular aus SelfHTMl zum Beispiel
    genommen und möchte die Eingabe der Email auf bestimmte Zeichen
    überprüfen. So hatte ich mir vorgenommen den Skalar mit folgender
    Konstruktion zu überprüfen:

    unless {$Email =~ /@/) {

    ^
    Das war hoffentlich nur ein Fehler beim Abtippen? Wenn ja, siehe
    unten.

    #-->Benutzereingabe falsch<--
    }

    Folgendes funktioniert hier problemlos:

    === cut ===
    #!/usr/bin/perl -w

    $email = "fs@tower.de";

    unless ($email =~ /@/) {
      print "wrong";
    } else {
      print "right";
    }
    === cut ===

    Da müsstest du uns schon ein bisschen mehr verraten, wenn du wissen
    willst, wieso deines nicht klappt. Ich kann mir jetzt auch nicht so
    richtig vorstellen, wieso das bei dir nicht geht. Vielleicht steht
    in der Variable nix (Variablen in perl sind case-sensitiv). Hast du
    mal "use strict;" und einen Aufruf mit Parameter -w (warnings)
    ausprobiert? Irgendwelche Ergebnisse?

    if {$Email != /@/) {
    #-->Benutzereingabe falsch<--
    }

    Wenn schon, dann muss das folgendermaßen aussehen:

    === cut ===
    if ($Email !~ /@/) {
      # Fehlerbehandlung
    }
    === cut ===

    bye, Frank!

    1. Hallo,

      Zur Anmerkung: Immer wenn irgend ein Fehler auftaucht bekomme ich anstatt einer Fehlermeldung bedingt durch -w, use strict; oder use warnings; nur einen weißen Bildschirm. Was soll das?

      Hier mein ganzer Script:

      #!/usr/bin/perl -w

      use warnings;
      use strict;

      Formulardaten einlesen

      my $IPNachweis = $ENV{'REMOTE_ADDR'};
      my $IPSchalter = 0;
      my $REQUEST_METHOD = $ENV{'REQUEST_METHOD'};
      my $QUERY_STRING = $ENV{'QUERY_STRING'};
      my $CONTENT_LENGTH = $ENV{'CONTENT_LENGTH'};
      my $Daten = "";

      if($REQUEST_METHOD eq 'GET')
       {
        $Daten = $QUERY_STRING;
       }
      else
       {
        read(STDIN, $Daten, $CONTENT_LENGTH);
       }

      my @Formularfelder = split(/&/, $Daten);
      my $i = 0;
      my @Formular = "";

      foreach my $Feld (@Formularfelder)
       {
        (my $name, my $value) = split(/=/, $Feld);
        $value = &ZuText($value);
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ s/<!--(.|\n)*-->//g;
        $Formular[$i] = $value;
        ++$i;
       }

      my $Name = $Formular[0];
      my $Email = $Formular[1];
      my $Text = $Formular[2];

      HTML-Code an Browser senden

      #Hier sollte diese Anweidung stehen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      #Geht aber halt nicht
      if ($Name ne "" && $Email ne "" && $Text ne "")  {

      Eingelesene Formulardaten als Mail zum Formularanbieter senden

      my $Mailprogramm = "/usr/lib/sendmail";
      my $MailBetreff = "Feedback-Formular";
      my $Empfaenger = "webmaster@h-games.de";
      my $SenderName = $Name;
      my $SenderMail = $Email;

      open(MAIL,"|$Mailprogramm -t") || die "Konnte E-Mail nicht öffnen: $i";

      print MAIL "To: $Empfaenger\n";
      print MAIL "From: $SenderMail $SenderName\n";
      print MAIL "Subject: $MailBetreff\n\n";

      print MAIL "Name: $Name\n";
      print MAIL "E-Mail: $Email\n";
      print MAIL "Text: $Text\n";
      if ($IPSchalter == 1) {
      print MAIL "IPNachweis: $IPNachweis\n";
      }

      close(MAIL) || die "Konnte E-Mail nicht verschicken: $i";

      print "Content-type: text/ssi\n\n";
      print "<html>\n";
      print "<head>\n";
      print "<title>Danke für Ihr Feedback</title>\n";
      print "<!--#exec cgi="/cgi-bin/meta.pl"-->\n";
      print "</head>\n";
      print "<body>\n";

      print "<div align="center"><table cellspacing="0" cellpadding="0" border="0" class="Spielebereich">\n";
      print "<tr>\n";
      print "<td width="400" class="Spielehintergrund" cellspacing="0" cellpadding="0" border="0">\n";

      print "<p class="gelb">Danke für Ihr Feedback</p>\n";
      print "Wir freuen uns, daß Sie unser Formular ausgefüllt haben.<br>\n";
      print "Hier zur Kontrolle Ihre Angaben:<p>\n";

      print "<b>Name:</b> $Name<br>\n";
      print "<b>E-Mail:</b> $Email<br>\n";
      print "<b>Text:</b> $Text<br>\n";

      print "<p><hr noshade size="1"><p>";
      print "<div class="klein">Thomas Häber, <a href="mailto:webmaster@h-games.de">webmaster@h-games.de</a></div>";

      print "\n\n<script type="text/javascript">\n";
      print "<!--\n";
      print "Zurueck();\n";
      print "//-->\n";
      print "</script>\n";
      print "</td>\n";
      print "</tr>\n";
      print "</table></div>\n";

      print "</body>\n";
      print "</html>\n";

      }

      else {
      print "Content-type: text/ssi\n\n";
      print "<html>\n";
      print "<head>\n";
      print "<title>Feedback-Formular</title>\n";
      print "<!--#exec cgi="/cgi-bin/meta.pl"-->\n";
      print "</head>\n";
      print "<body>\n";
      print "<div align="center"><table cellspacing="0" cellpadding="0" border="0" class="Spielebereich">\n";
      print "<tr>\n";
      print "<td class="Spielehintergrund" width="400" cellspacing="0" cellpadding="0" border="0">\n";

      print "<div align="center">\n";
      print "<form action="/cgi-bin/formular.pl" method="post">\n";
      print "<table cellspacing="0" cellpadding="0" border="0">\n";
      print "  <tr>\n";
      print "    <td class="Felderspalt"> </td>\n";
      print "    <td class="Felderspalt"><p class="gelb">Feedback-Formular</p>\n";
      if ($Name eq "")
       {
       print "<p class="braun">Ihr Name fehlt.</p></td>\n";
       }
      elsif ($Email eq "")
       {
       print "<p class="braun">Ihre Email fehlt.</p></td>\n";
       }
      elsif ($Text eq "")
       {
       print "<p class="braun">Ihr Text fehlt.</p></td>\n";
       }
      print "  </tr>\n";
      print "  <tr>\n";
      print "    <td class="Felderspalt" align="right">Name  </td>\n";
      print "    <td class="Felderspalt"><input name="AnwenderName" size="40" class="Felder" value="$Name"></td>\n";
      print "  </tr>\n";
      print "  <tr>\n";
      print "    <td class="Felderspalt" align="right">E-Mail  </td>\n";
      print "    <td class="Felderspalt"><input name="AnwenderMail" size="40" class="Felder" value="$Email"></td>\n";
      print "  </tr>\n";
      print "  <tr>\n";
      print "    <td class="Felderspalt" align="right" valign="top">Text  </td>\n";
      print "    <td class="Felderspalt"><textarea name="Text" rows="7" cols="34" class="Felder">$Text</textarea></td>\n";
      print "  </tr>\n";
      print "  <tr>\n";
      print "    <td class="Felderspalt"> <br></td>\n";
      print "    <td class="Felderspalt"> <br><input type="submit" value="Formulardaten absenden" class="Button" onMouseOver="this.style.backgroundColor='#bbbbbb'" onMouseOut="this.style.backgroundColor='#447799'"></td>\n";
      print "  </tr>\n";
      print "</table>\n";
      print "</form>\n";
      print "</div>\n";

      print "\n\n<script type="text/javascript">\n";
      print "<!--\n";
      print "Zurueck();\n";
      print "//-->\n";
      print "</script>\n";
      print "</td>\n";
      print "</tr>\n";
      print "</table></div>\n";
      print "</body>\n";
      print "</html>\n";
      }

      #Funktion zum Tasuchen der Umlaute sowie diverser Zeichen in das Hypertextcode
      sub ZuText
      {
      for (@_)
      {
      $_ =~ s/%AE/&reg;/g;
      $_ =~ s/%A9/&copy;/g;
      $_ =~ s/%C0/&Agrave;/g;
      $_ =~ s/%C1/&Aacute;/g;
      $_ =~ s/%C2/&Acirc;/g;
      $_ =~ s/%C3/&Atilde;/g;
      $_ =~ s/%C4/&Auml;/g;
      $_ =~ s/%C5/&Aring;/g;
      $_ =~ s/%C6/&AElig;/g;
      $_ =~ s/%C7/&Ccedil;/g;
      $_ =~ s/%C8/&Egrave;/g;
      $_ =~ s/%C9/&Eacute;/g;
      $_ =~ s/%CA/&Ecirc;/g;
      $_ =~ s/%CB/&Euml;/g;
      $_ =~ s/%CC/&Igrave;/g;
      $_ =~ s/%CD/&Iacute;/g;
      $_ =~ s/%CE/&Icirc;/g;
      $_ =~ s/%CF/&Iuml;/g;
      $_ =~ s/%D0/&ETH;/g;
      $_ =~ s/%D1/&Ntilde;/g;
      $_ =~ s/%D2/&Ograve;/g;
      $_ =~ s/%D3/&Oacute;/g;
      $_ =~ s/%D4/&Ocirc;/g;
      $_ =~ s/%D5/&Otilde;/g;
      $_ =~ s/%D6/&Ouml;/g;
      $_ =~ s/%D7/&Oslash;/g;
      $_ =~ s/%D8/&Uacute;/g;
      $_ =~ s/%D9/&Ugrave;/g;
      $_ =~ s/%D9/&Ucirc;/g;
      $_ =~ s/%DC/&Uuml;/g;
      $_ =~ s/%DD/&Yacute;/g;
      $_ =~ s/%DE/&THORN;/g;
      $_ =~ s/%DF/&szlig;/g;
      $_ =~ s/%E0/&agrave;/g;
      $_ =~ s/%E1/&aacute;/g;
      $_ =~ s/%E2/&acirc;/g;
      $_ =~ s/%E3/&atilde;/g;
      $_ =~ s/%E4/&auml;/g;
      $_ =~ s/%E5/&aring;/g;
      $_ =~ s/%E6/&aelig;/g;
      $_ =~ s/%E7/&ccedil;/g;
      $_ =~ s/%E8/&egrave;/g;
      $_ =~ s/%E9/&eacute;/g;
      $_ =~ s/%EA/&ecirc;/g;
      $_ =~ s/%EB/&euml;/g;
      $_ =~ s/%EC/&igrave;/g;
      $_ =~ s/%ED/&iacute;/g;
      $_ =~ s/%EE/&icirc;/g;
      $_ =~ s/%EF/&iuml;/g;
      $_ =~ s/%F0/&eth;/g;
      $_ =~ s/%F1/&ntilde;/g;
      $_ =~ s/%F2/&ograve;/g;
      $_ =~ s/%F3/&oacute;/g;
      $_ =~ s/%F4/&ocirc;/g;
      $_ =~ s/%F5/&otilde;/g;
      $_ =~ s/%F6/&ouml;/g;
      $_ =~ s/%F8/&oslash;/g;
      $_ =~ s/%F9/&ugrave;/g;
      $_ =~ s/%FA/&uacute;/g;
      $_ =~ s/%FB/&ucirc;/g;
      $_ =~ s/%FC/&uuml;/g;
      $_ =~ s/%FD/&yacute;/g;
      $_ =~ s/%FE/&thorn;/g;
      $_ =~ s/%FF/&yuml;/g;
      return $_;
      }
      }

      Das Formular könnt Ihr euch ja denken.

  2. hi,

    vielleicht sowas:

    if(!ereg("^.+@.+..+$", $Email))
    {
     # tu_was_Du_willst_wenn_nicht_korrekt...
    }

    hth

    Gruesse  Joachim

    1. hi again,

      sorry...

      if(!ereg("^.+@.+..+$", $Email))
      {

      tu_was_Du_willst_wenn_nicht_korrekt...

      }

      ...ich war bei php

      Gruess  Joachim