Just nu i M3-nätverket
Gå till innehåll

Kontrollera tal i variabel


A Persson

Rekommendera Poster

Någon som vet koden (perl) för att kolla att en variabel endast innehåller siffror, eller åtminstonde ett tal. Bokstäver och div. tecken som !#@ är inte välkommna!

 

Rätt:

$var = "123";

 

Fel:

$var = "abc";

 

Länk till kommentar
Dela på andra webbplatser

Är det inte något i stil med:

 

if $var =~ /[0-9]+/

 

(Får bara innehålla en eller flera siffror mellan 0 och 9)

 

Länk till kommentar
Dela på andra webbplatser

Är det inte något i stil med:

 

if $var =~ /[0-9]+/

 

Nästan, det behövs nog parenteser runt uttrycket och sen vill du gissningsvis testa om strängen bara innehåller 1-n siffror och inte bara om det finns en eller flera siffror i den, nåt i stil med:

if ($var =~ /^[0-9]+$/) {
 printf("Numerisk\n");
}

 

 

Länk till kommentar
Dela på andra webbplatser

Ojojoj!

Tack så jättemycket för både snabbt och bra svar! Blev förvånad över att jag fick hjälp så fort! Som lite nybörjare på perl som jag är så har jag bara en liten fråga till som jag kom på nu...

 

Vad är det för skillnad på att skriva...

 

printf("Numerisk\n");

 

...och...

 

print "Numerisk\n";

 

?

 

Länk till kommentar
Dela på andra webbplatser

Ja, det var väl en 7-8 år sedan jag programmerade Perl seriöst, men är det printf i samma mening som C-språkets så betyder det att man kan formatera strängar mha variabler typ:

 

printf ("Hej %s, Du har %d kronor på kontot", $strangen, $siffran);

 

Vilket med $strangen = "Erik" och $siffran = 1000 skulle visa:

"Hej Erik, Du har 1000 kr på kontot"

 

Det är väl samma sak som att skriva print "Hej $strangen, Du har $siffran kr på kontot" men finns nog för de som föredrar C-stuket.

 

 

 

Länk till kommentar
Dela på andra webbplatser

Tack så mycket för informationen!

Är kul att både lära sig och snacka med personer som "orkar" lära ut... Upptäckte en liten grej med koden som jag fick av fhe.

 

if ($var =~ /^[0-9]+$/)

 

Den funkar perfekt MEN den accepterar bara heltal. Om man vill slinka in med ett ,-tecken eller en punkt så funkar inte det. Finns det något sätt att lätt lägga till såna tecken som också ska accepteras?

 

Länk till kommentar
Dela på andra webbplatser

Den funkar perfekt MEN den accepterar bara heltal

Ja, uttrycket betyder. "Matchar allt som består av 1 eller flera siffror mellan start och slut på strängen".

 

Om man vill slinka in med ett ,-tecken eller en punkt så funkar inte det.

Vill du göra det måste du ha ett uttryck som tillåter det, följande betyder ungefär:

"en eller flera siffror som kan vara följt av 0 eller 1 , eller . och därefter 0 eller fler siffror":

if ($var =~ /^[0-9]+[.,]?[0-9]*$/) {

Det innebär förvisso att den även kommer att acceptera "10." men det kanske du kan leva med för att slippa ett allt för komplicerat regulärt uttryck :-)

 

 

Länk till kommentar
Dela på andra webbplatser

Hehe! "10." Funkar bra för mig. :-)

Vad jag förstår så accepteras nu alltså bara tecken som:

 

1 2 3 4 5 6 7 8 9 0 , .

 

Även "...", men det är väl smällar man får ta! ;-)

 

Är mycket tacksam för all hjälp som jag fått från dig/er!

Nu ska det nog funka som jag vill!

 

Länk till kommentar
Dela på andra webbplatser

Även "...", men det är väl smällar man får ta! ;-)

 

Nä...det ska den inte göra.

fhe's uttryck säger:

strängen startar - en eller flera siffror - noll eller en punkt eller komma - noll eller flera siffror - strängen slut

 

 

==Coleburn==

 

--------------------

"It takes a lot of knowledge to

really mess something up!"

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...