Thread Problem mit Programm
(10 answers)
Opened by Gast at 2008-07-26 15:26
Hi,
perl kennt auch schon Zeichenbereiche, mit [a-z] sind alle Kleinbuchstaben von a bis z gemeint. Das macht den Code viel übersichtlicher: [a-zA-Z0-9] Die Zahlen 0-9 kann man auch als \d schreiben, also: [a-zA-Z\d] Dann brauchst Du die Sonderzeichen nicht extra behandeln, die kannst Du in die Zeichenklasse mit reinpacken: [a-zA-Z\d!"%.] Übrigens steht der Punkt '.' in einem Regex für jedes beliebige Zeichen; du musst ihn also entweder maskieren '\.' oder in eine Zeichenklasse packen; dort steht er nur für sich selbst. Dann brauchst Du den String nicht aufsplitten, um jedes Zeichen einzeln zu prüfen, Perl kann mit Regex den ganzen String kontrollieren. Mein Vorschlag (die Prüfung wurde in eine eigene Routine verlagert): Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 sub _is_valid_string { my $string = shift; my $valid = 'a-zA-Z0-9!"$%.'; # laenge kontrollieren return 0 if length $string < 7; return 0 if length $string > 16; # auf ungueltige Zeichen kontrollieren return 0 if $string =~ m/[^$valid]/; # auf mindestens einen Buchstaben kontrollieren return 0 if $string !~ m/[a-zA-Z]/; # auf mindestens eine Zahl kontrollieren return 0 if $string !~ m/\d/; # bisher kein Fehler? dann sollte $string ok sein return 1; } # Woerter ueberpruefen for my $word ( qw( abc123ABC %%%%%aa ) ) { if ( _is_valid_string( $word ) ) { print "$word is OK\n"; } else { print "$word is not OK\n"; } } Dringend empfohlen ist die Lektüre der Perldoc; speziell: perlrequick perlretut perlre meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |