Thread Problem mit Programm (10 answers)
Opened by Gast at 2008-07-26 15:26

Linuxer
 2008-07-26 15:46
#112780 #112780
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
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!

View full thread Problem mit Programm