Schrift
[thread]6832[/thread]

String-Prüfung auf Zahlen & Zeichen



<< >> 9 Einträge, 1 Seite
Quenten
 2005-04-01 16:50
#53140 #53140
User since
2005-02-15
22 Artikel
BenutzerIn
[default_avatar]
Wie prüfe ich den Wert einer Variablen am Einfachsten auf Zahlen und Zeichen?

Bsp.:
36978 -> Zahl
45frwe -> Zahlen & Zeichen
kdoek -> Zeichen

Ich muss nur wissen, ob es ne reine Zahl ist oder nicht. Sobald Zeichen drin vorkommen, kann ich in den ELSE-Zweig wechseln.
Danke schon mal!\n\n

<!--EDIT|Quenten|1112359885-->
renee
 2005-04-01 17:30
#53141 #53141
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
if($string =~ /^\d+$/){
print "Es sind nur Zahlen\n";
}
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/
Quenten
 2005-04-01 17:45
#53142 #53142
User since
2005-02-15
22 Artikel
BenutzerIn
[default_avatar]
danke, renee, aber ich hab glaube ich so meine probs mit den reg. expressions

unter selfhtml steht:
/\d/ passt auf eine Zeichenkette, die (mindestens) eine Ziffer enthält

sprich die if-abfrage würde doch dann lauten:
Wenn $string von Anfang des String bis zum Ende des Strings ein oder mehrere Ziffern (also nicht Zahlen) enthält, dann soll er "Es sind nur Zahlen" ausgeben!??!
Dubu
 2005-04-01 18:01
#53143 #53143
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Nicht ganz. Der Ausdruck /^\d+$/ bedeutet: "Anfang des Strings, dahinter eine Folge von ein oder mehr Ziffern, dann Ende des Strings", mit anderen Worten: zwischen Anfang und Ende darf nur eine Ziffernfolge stehen. Das heisst nichts anderes, als dass der String nur aus einer oder mehr Ziffern besteht.

Umgekehrt koenntest du auch pruefen, ob der String ein Zeichen enthaelt, das keine Ziffer ist:
Code: (dl )
1
2
3
4
5
if (/\D/) {
   print "Da ist was drin, was keine Ziffer ist.\n";
} else {
   # ...
}


Edit: Man beachte das grosse "\D": es steht fuer ein Zeichen, dass keine Ziffer ist.\n\n

<!--EDIT|Dubu|1112364265-->
Quenten
 2005-04-01 18:49
#53144 #53144
User since
2005-02-15
22 Artikel
BenutzerIn
[default_avatar]
Alles klar, danke!
Ishka
 2005-04-01 19:34
#53145 #53145
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
wobei ich mal gebenchmarkt habe, daß /^\d+$/ schneller ist als /\D/. Allerdings ist das meistens eh egal bei den geringen Zeiten ;) .
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
pq
 2005-04-02 13:53
#53146 #53146
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also wenn ihr schnellen code wollt, warum nehmt ihr dann nicht tr///?
Code: (dl )
1
2
3
if ($string =~ tr/0-9//c) { 
 print "String besteht nicht nur aus Zahlen!";
}
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2005-04-04 18:47
#53147 #53147
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Und was ist mit der Zahl -1.23E205 ?
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
ptk
 2005-04-05 00:00
#53148 #53148
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Am besten zu loesen mit looks_like_number aus dem Standardmodul Scalar::Util.
<< >> 9 Einträge, 1 Seite



View all threads created 2005-04-01 16:50.