Schrift
[thread]5811[/thread]

Prüfen, ob Zahl oder String (Seite 2)

Leser: 2


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Crian
 2003-10-20 18:50
#62406 #62406
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Naja, für so etwas einfaches ziehe ich aber eine im Code sichtbare RE der Verwendung des Moduls vor. Anders wäre es bei komplizierteren Sachen...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Relais
 2003-10-20 19:21
#62407 #62407
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Crian,17.10.2003, 15:43]Also lieber /^[-+0-9.,_]+$/ oder was man an Zeichen so gern in seiner Zahl zulassen möchte...[/quote]
",,,," ist aber keine Zahl.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Crian
 2003-10-20 19:26
#62408 #62408
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Das stimmt. Es kommt natürlich darauf an, was man da eigentlich filtert, also wie gut (oder schlecht) die Eingangsdaten sind. Wenn ... vorkommen kann und andere Schweinereien wie '-.,,+.' etc., braucht man komplexere RE's und dann würd ich zu den vorgefertigten greifen.

Edit: Wie verfährt Perl eigentlich mit '_' in Zahlen? Wird das Zeichen generell ignoriert, oder nur an den passenden Stellen?

Ist "-_9._6" eine Zahl für Perl?

Perl sagt mit

Code: (dl )
print -_9._6 == -9.674 ? "ja\n" : "nein\n";


"nein".

Bei

Code: (dl )
print -1_9._62 == -19.6742 ? "ja\n" : "nein\n";


sagt es "ja", allerdings gibt es drei mal

Quote
Misplaced _ in number at C:\Daten\perl\underscore_in_zahl.pl line 1.


von sich...\n\n

<!--EDIT|Crian|1066663889-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Dubu
 2003-10-20 21:50
#62409 #62409
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn im zweiten Fall "ja" herauskommt, ist dein perl kaputt, denn die Zahlen sind nicht gleich. ;)

Was den Underscore angeht: Perl mag ihn nur zwischen Ziffern, wo er ja auch sinnvoll ist; an anderen Stellen einer Zahl gibt's eine Warnung.

Zum Problem siehe uebrigens auch perldata:
[quote=Scalar values,perldata]
[...] At other
      times, you might prefer to determine whether string data can be used numerically by calling the POSIX::strtod() function
      or by inspecting your string with a regular expression (as documented in perlre).
          warn "has nondigits"        if     /\D/;
          warn "not a natural number" unless /^\d+$/;             # rejects -3
          warn "not an integer"       unless /^-?\d+$/;           # rejects +3
          warn "not an integer"       unless /^[+-]?\d+$/;
          warn "not a decimal number" unless /^-?\d+\.?\d*$/;     # rejects .2
          warn "not a decimal number" unless /^-?(?:\d+(?:\.\d*)?|\.\d+)$/;
          warn "not a C float"
              unless /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;

[/quote]
steffenw
 2003-10-20 22:24
#62410 #62410
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das Thema ist gar nicht so uninteressant, z.B. ob eine Variable undef, 0 oder '' ist.

Ich habe mal sowas gebraucht, um in HTML ein Tabellenfeld auf jeden Fall sichtbar zu gestalten. Bei
Code: (dl )
<td>$var</td>
fehlt der Rahmen, wenn
Code: (dl )
$var = '';
. Mit
Code: (dl )
$var ||= '&nbsp;';
verschwindet auch die 0, wenn vorher
Code: (dl )
$var = 0;
war. Es beseitigt nur das ''- und undef-Problem.\n\n

<!--EDIT|steffenw|1066674395-->
$SIG{USER} = sub {love 'Perl' or die};
Crian
 2003-10-21 12:42
#62411 #62411
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Dubu,20.10.2003, 19:50]Wenn im zweiten Fall "ja" herauskommt, ist dein perl kaputt, denn die Zahlen sind nicht gleich. ;)[/quote]
War wohl ein Kopierfehler, es sollte heißen:

Code: (dl )
print -1_9._62 == -19.6742 ? "ja\n" : "nein\n";


Edit: Oh, kein Kopierfehler, ein heftiger Fehler im Code Tag, mal sehen, ob tt das hinekommt:

print -1_9._62 == -19.6742 ? "ja\n" : "nein\n";

Edit2: AUCH NICHT *kratz*

Im Klartext: print -1_9._62 == -19.6742 ? "ja\n" : "nein\n";

Edit 3: Auch im Klartext nicht, dieses Forum ist bugged....

ich füg mal Doppelpunkte zwischen jedes Zeichen ein:

p:r:i:n:t: :-:1:_:9:.:_:6:_:_:7:_:4:_:_:2: :=:=: :-:1:9:.:6:7:4:2: :?: :":j:a:\:n:": ::: :":n:e:i:n:\:n:":;\n\n

<!--EDIT|Crian|1066725938-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Dubu
 2003-10-22 01:19
#62412 #62412
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Diesen Fehler im Board habe ich schon zweimal beschrieben: Text zwischen doppelten Unterstrichen wird einfach geloescht. (Und durch das Prinzip, dass nicht die Eingabe, sondern das geparste Ergebnis gespeichert wird, hat man den Text nach der Vorschau nicht mal mehr im Edit-Fenster...)
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2003-10-09 15:34.