Überprüfung auf bestimmte Zeichen
Thomas Häber
- perl
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
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!
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;
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];
#Hier sollte diese Anweidung stehen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#Geht aber halt nicht
if ($Name ne "" && $Email ne "" && $Text ne "") {
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/®/g;
$_ =~ s/%A9/©/g;
$_ =~ s/%C0/À/g;
$_ =~ s/%C1/Á/g;
$_ =~ s/%C2/Â/g;
$_ =~ s/%C3/Ã/g;
$_ =~ s/%C4/Ä/g;
$_ =~ s/%C5/Å/g;
$_ =~ s/%C6/Æ/g;
$_ =~ s/%C7/Ç/g;
$_ =~ s/%C8/È/g;
$_ =~ s/%C9/É/g;
$_ =~ s/%CA/Ê/g;
$_ =~ s/%CB/Ë/g;
$_ =~ s/%CC/Ì/g;
$_ =~ s/%CD/Í/g;
$_ =~ s/%CE/Î/g;
$_ =~ s/%CF/Ï/g;
$_ =~ s/%D0/Ð/g;
$_ =~ s/%D1/Ñ/g;
$_ =~ s/%D2/Ò/g;
$_ =~ s/%D3/Ó/g;
$_ =~ s/%D4/Ô/g;
$_ =~ s/%D5/Õ/g;
$_ =~ s/%D6/Ö/g;
$_ =~ s/%D7/Ø/g;
$_ =~ s/%D8/Ú/g;
$_ =~ s/%D9/Ù/g;
$_ =~ s/%D9/Û/g;
$_ =~ s/%DC/Ü/g;
$_ =~ s/%DD/Ý/g;
$_ =~ s/%DE/Þ/g;
$_ =~ s/%DF/ß/g;
$_ =~ s/%E0/à/g;
$_ =~ s/%E1/á/g;
$_ =~ s/%E2/â/g;
$_ =~ s/%E3/ã/g;
$_ =~ s/%E4/ä/g;
$_ =~ s/%E5/å/g;
$_ =~ s/%E6/æ/g;
$_ =~ s/%E7/ç/g;
$_ =~ s/%E8/è/g;
$_ =~ s/%E9/é/g;
$_ =~ s/%EA/ê/g;
$_ =~ s/%EB/ë/g;
$_ =~ s/%EC/ì/g;
$_ =~ s/%ED/í/g;
$_ =~ s/%EE/î/g;
$_ =~ s/%EF/ï/g;
$_ =~ s/%F0/ð/g;
$_ =~ s/%F1/ñ/g;
$_ =~ s/%F2/ò/g;
$_ =~ s/%F3/ó/g;
$_ =~ s/%F4/ô/g;
$_ =~ s/%F5/õ/g;
$_ =~ s/%F6/ö/g;
$_ =~ s/%F8/ø/g;
$_ =~ s/%F9/ù/g;
$_ =~ s/%FA/ú/g;
$_ =~ s/%FB/û/g;
$_ =~ s/%FC/ü/g;
$_ =~ s/%FD/ý/g;
$_ =~ s/%FE/þ/g;
$_ =~ s/%FF/ÿ/g;
return $_;
}
}
Das Formular könnt Ihr euch ja denken.
hi,
vielleicht sowas:
if(!ereg("^.+@.+..+$", $Email))
{
# tu_was_Du_willst_wenn_nicht_korrekt...
}
hth
Gruesse Joachim
hi again,
sorry...
if(!ereg("^.+@.+..+$", $Email))
{tu_was_Du_willst_wenn_nicht_korrekt...
}
...ich war bei php
Gruess Joachim