Thread 1 oder 3 oder 12 der 44 (16 answers)
Opened by chmod777 at 2010-01-20 21:21

sid burn
 2010-01-21 14:39
#131045 #131045
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Ist korrekt, aber es wurde auch gar nicht nach einem Integer gefragt, sondern es wurde einfach gefragt ob diese einem Wert übereinstimmen. Und Wert zählt für mich als Zahl.

Den Punkt erwähne ich deswegen da man in der Regel ja oft Benutzereingaben abfragt. Und wenn diese in der Shell oder in einer Webapplikation z.B. "1.00" eingeben sieht Perl wegen eingabe es als String an. Und die Regex würde fehlschlagen. Und auch wenn man vorher überprüft ob wirklich eine Zahl eingegeben wurde zum Beispiel mit Scalar::Util::looks_like_number oder einer Regex aus Regexp::Common (was man machen sollte) so kann die Validierung erfolgreich sein aber das verhalten trotzdem noch anders sein.

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
34
#!/usr/bin/env perl
use strict;
use warnings;
use Scalar::Util;
use Perl6::Junction qw(any);
*is_num = \&Scalar::Util::looks_like_number;

# Eingabe
print "Bitte eine Zahl eingeben: ";
chomp( my $input = <STDIN> );

# Prüfen auf Zahl
if ( !is_num($input) ) {
    die "Eingabe ist keine Zahl\n";
}
if ( $input =~ m/\Ainf\z/ixms ) {
    die "Eingabe ist keine Zahl\n";
}

# any() test
if ( $input == any(1,2,3) ) {
    print "Benutzer hat 1,2 oder 3 eingegeben.\n";
}
else {
    print "Benutzer hat etwas anderes als 1,2,3 eingegeben.\n";
}

# Regex Test
if ( $input =~ m/\A(1|2|3)\z/xms ) {
    print "Benutzer hat 1,2 oder 3 eingegeben.\n";
}
else {
    print "Benutzer hat etwas anderes als 1,2,3 eingegeben.\n";
}


Wenn ein Benutzer in der Shell "1.00" eingibt ist die Validierung ob es eine Zahl ist okay. Beim Regexp Match würde er aber ausgeben das es nicht okay war.

Wenn natürlich explizit gefordert wird vom Nutzer das nur "Integer" ohne Kommastellen eingegeben werden dürfte müsste die Validierung natürlich anders sein. Bzw. dann wäre die Regexp meinetwegen auch wieder okay. Ich würde aber die Validierung anpassen und den Match mit der Zahl lassen.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread 1 oder 3 oder 12 der 44