Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]860[/thread]

Formulardaten validieren: welches Modul, regex und Umlaute



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Superfrank
 2006-12-14 11:37
#9360 #9360
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Guten Morgen,
ich will das Überprüfen von Formulardaten endlich mal sauber auf die Reihe kriegen und habe hier schon ein paar Threads gefunden wo folgende Module empfohlen wurden:

CPAN:FormValidator::Simple

CPAN:Data::FormValidator

CPAN:CGI::Validate

Zum einen soll mit Hilfe einer Whiteliste auf ungültige Zeichen überprüft werden, weiterhin ist die Mindestanzahl der Zeichen wichtig. Reguläre Ausdrücke versagen bei mir leider, wenn in dem String ein 2-byte-kodiertes Zeichen (Umlaut) vorhanden ist und ich habe mal wieder keinen blassen Schimmer wie das vorher en- oder dekodoert werden muß.
Die html-Formulare sind utf8-kodiert und Perlversion ist 5.8.8.

Kann mir jemand ein geeignetes Modul empfehlen und weiß eine Lösung zum Anwenden von regex auf "Sonderzeichenstrings"?

Grüsse

Frank
renee
 2006-12-14 11:43
#9361 #9361
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht hilft Dir das hier mit allen darin verlinkten Sachen weiter...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Superfrank
 2006-12-14 13:06
#9362 #9362
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Hallo Renee,
so das Wahre ist das auch noch nicht, ich habe aber schon mal herausgefunden, daß nach

Code: (dl )
$string = decode("utf8", $input{'Strasse'})


ein Regex auch mit Umlauten funktioniert. Das bringt mir schon mal jede Menge. Vorher hatte ich mit unpack alles auseinandergenommen und die einzelnen Zahlen die dabei rauskamen überprüft.

Grüsse

Frank
Superfrank
 2006-12-14 16:35
#9363 #9363
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
tja, geht doch nicht. Angenommen $input{'Strasse'} ist "Bäbä"


Code: (dl )
1
2
3
4
5
$string = decode("utf8", $input{'Strasse'});

if($string !~ /[öüÖÜßA-Za-z0-9\+\.\-\ ]/){
print DEBUG "MÖÖÖÖÖÖÖP111!!!!!!!!!!!!!!\n";
}


gibt nix, obwohl ein ä in dem String vorkommt, aber ein


Code: (dl )
1
2
3
4
5
6
$string = decode("utf8", $input{'Strasse'});
@allchars = split //, $string;
foreach $char (@allchars){
if($char !~ /[öüÖÜßA-Za-z0-9\+\.\-\ ]/){
print DEBUG "MÖÖÖÖÖÖÖP222!!!!!!!!!!!!!!\n";
}


funktioniert. Hat jemand eine Erklärung?

Grüsse

Frank
PerlProfi
 2006-12-14 16:42
#9364 #9364
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Funktioniert denn folgendes?
Code: (dl )
1
2
3
4
5
$string = decode("utf8", $input{'Strasse'});

if ($string !~ /^[öüÖÜßA-Za-z0-9\+\.\-\ ]+$/) {
print DEBUG "MÖÖÖÖÖÖÖP111!!!!!!!!!!!!!!\n";
}


Denn ich würde sagen, deine erste RegExp trifft nicht zu, weil eben auch ein B drin ist.

MfG PerlProfi
renee
 2006-12-14 16:44
#9365 #9365
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
probier mal:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;
use CGI qw(:standard);
use Encode;

print header('text/plain');

my $var = param('strasse');
$var = decode_utf8($var);
print $var,"\n";

print "MÖÖP!!" if $var =~ /[^ÖÜöüßA-Za-z0-9.,]/;
\n\n

<!--EDIT|renee|1166107623-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-12-14 16:45
#9366 #9366
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Edit: Blödsinn geschrieben.. Wer lesen kann ist klar im Vorteil...\n\n

<!--EDIT|renee|1166107588-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Superfrank
 2006-12-14 17:07
#9367 #9367
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Hallo,
was soll ich sagen, auf Euch ist Verlaß!



Code: (dl )
1
2
3
if($string !~ /^[öüÖÜßA-Za-z0-9\+\.\-\ ]+$/) {
print DEBUG "MÖÖÖÖÖÖÖP111!!!!!!!!!!!!!!\n";
}


funktioniert in der Tat, obwohl ich nicht weiß wie du das mit dem B meinst, da B in "A-Z" enthalten ist.
Renees Lösung funktioniert (natürlich ;) ) ebenfalls und ich bin nun hinter das Geheimnis meines Problemes gekommen.

Das Script an dem ich gerade bastel ist schon ca. 10 Jahre alt und zum Einlesen der Formulardaten wurde gar nicht das CGI-Modul sondern einer uralte Version von cgi-lib.pl verwendet. Ich konnte reproduzieren, daß der regex nach dem Einlesen mit ReadParse() nicht funktioniert während es mit dem CGI-Modul problemlos funktioniert.

Grüsse

Frank
renee
 2006-12-14 17:40
#9368 #9368
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Interessant! Ein zusätzlicher Grund, auf CPAN:CGI umzusteigen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
PerlProfi
 2006-12-14 19:01
#9369 #9369
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
@superfrank du wolltest überprüfen, ob dein string nicht aus richtigen zeichen besteht, du hast aber nur überprüft, ob er nicht, richtige zeichen enthällt, aber er enthällt ja nun mal richtige zeichen(z.B.: B), desshalb trifft deine erste RegExp nicht zu.

Dahingehend habe ich es erweitert.

Deine 2. RegExp trifft natürlich zu, weil es nur ein zeichen ist, welches du auf nicht richtige zeichen überprüfst.

MfG PerlProfi
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2006-12-14 11:37.