Avatar billede learner Praktikant
03. august 2005 - 12:33 Der er 42 kommentarer og
1 løsning

Undersøge om variabel er tal mellem 1 og 100 og kun hele tal

Hej, jeg har forsøgt at finde på en måde at tjekke følgende:
if (!$tal){fejl}
if ($tal indeholder andet end tal - feks tegn eller bogstaver){fejl}
if ($tal ikke er et helt tal){fejl}
if ($tal ikke er mellem 1 og 999 begge inkl){fejl}

Jeg kan sku ik finde på en løsning :o)
Sådan er det vel bare en gang imellem :o)
Avatar billede jaw Nybegynder
03. august 2005 - 12:39 #1
Prøv:

if(isset($tal) && !empty($tal) && is_numeric($tal) && ($tal > 0 && $tal < 1000) {
  //ok
} else {
  //fejl
}
Avatar billede jaw Nybegynder
03. august 2005 - 12:39 #2
Mangler vist lige en slut-parantes:

if(isset($tal) && !empty($tal) && is_numeric($tal) && ($tal > 0 && $tal < 1000)) {
Avatar billede learner Praktikant
03. august 2005 - 13:28 #3
Er det her ik det samme:
if ( ($tal) && (is_numeric($tal)) && (($tal > 0)&&($tal < 1000)) ) {}else{fejl}
Avatar billede jaw Nybegynder
03. august 2005 - 13:32 #4
Tjoh, men mener at syntaksen i nyere php-versioner påskriver at man benytter isset() selvom if($tal) nok også vil virke...
Avatar billede coderdk Praktikant
03. august 2005 - 13:45 #5
isset() er ikke nødvendig når du bruger empty()
Avatar billede jaw Nybegynder
03. august 2005 - 13:49 #6
Nej, det kan der selvf. være noget om :)
Avatar billede Slettet bruger
03. august 2005 - 14:00 #7
if(isset($tal) && is_numeric($tal) && $tal <= 100 && $tal >= 1 && preg_match("^[0-9]$", $tal))

Det er lidt svært at finde ud af om max skal være 1000 eller 100, da du skriver begge dele i dit spørgsmål.
Avatar billede Slettet bruger
03. august 2005 - 14:00 #8
if(isset($tal) && is_numeric($tal) && $tal <= 100 && $tal >= 1 && preg_match("/^[0-9]+$/", $tal))
Avatar billede coderdk Praktikant
03. august 2005 - 14:06 #9
jaw's fra 03/08-2005 12:39:39 (uden isset() dog) ser helt fin ud :)
wicez kravene er anderledes i "opgaveteksten" end i titlen ;)
Avatar billede mollevp Nybegynder
03. august 2005 - 14:10 #10
Nu er jeg ingen php haj, men hvorfor kan man ikke bare:

if(($tal > 1) && ($tal < 100))
    echo "sand<br>";
Avatar billede learner Praktikant
03. august 2005 - 14:14 #11
preg_match("/^[0-9]+$/", $tal) ??? Hvad gør den?
Avatar billede Slettet bruger
03. august 2005 - 14:17 #12
learner den undersøge, om der er komma i tallet. Den her bør egentlig kunne gøre det:


if(isset($tal) && preg_match("/^([1-9][0-9])|100$/", $tal))
Avatar billede learner Praktikant
03. august 2005 - 14:22 #13
det skal være 1 til 999 :o)
Hvordan skal den så se ud?
Avatar billede Slettet bruger
03. august 2005 - 14:22 #14
if(isset($tal) && preg_match("/^(([1-9][0-9])|100)$/", $tal)
Avatar billede Slettet bruger
03. august 2005 - 14:23 #15
if(isset($tal) && preg_match("/^[1-9][0-9]{0,2}$/", $tal)
Avatar billede Slettet bruger
03. august 2005 - 14:25 #16
Den sidste bør klare det du vil have.
Avatar billede Slettet bruger
03. august 2005 - 14:27 #17
Og det bør den her også: 

if(($tal >= 1 && $tal <= 100) && ((int)$tal == $tal))
Avatar billede learner Praktikant
03. august 2005 - 14:33 #18
Kan godt li de 2 sidste. Er du flink at forklare en lille smule inden vi lukker :o)
Jeg vil gerne vide:

vedr preg_match:
hvad beder du den om her /^[1-9][0-9]{0,2}$/

vedr den sidste: ((int)$tal == $tal))
(int)$tal laver $tal om til et helt tal. Korrekt?
Avatar billede mollevp Nybegynder
03. august 2005 - 14:34 #19
Er der ikke en der kan forklare hvor man ikke bare kan lave en:

if(($tal > 0) && ($tal < 1000))
    echo "sand<br>";
Avatar billede mollevp Nybegynder
03. august 2005 - 14:37 #20
ahh.. glemmer php ikke er så type konsistent.. jeg har fanget den :)
Avatar billede learner Praktikant
03. august 2005 - 14:39 #21
mollevp
$tal kan jo feks være 0.1 og så vil din skrive sand
Der må ikke være komma eller andre tegn eller bogstaver eller mellemrum i mit eksempel
Avatar billede learner Praktikant
03. august 2005 - 14:57 #22
$tal skal være et nummer mellem 1 0g 999 - ikke andet!

Jeg er kommet frem til disse muligheder:
if ( (!$tal)||($tal<1)||($tal>999)||(!preg_match("/^[1-9][0-9]{0,2}$/", $tal)) ){fejl}
if ( (!$tal)||($tal<1)||($tal>999)||(!preg_match ("/^([0-9]+)$/", $tal)) ){fejl}
if ( (!$tal)||($tal<1)||($tal>999)||((int)$tal != $tal) ){fejl}

Virker de efter hensigten?
Er der en der er bedst at bruge?
Avatar billede Slettet bruger
03. august 2005 - 15:01 #23
/^[1-9][0-9]{0,2}$/  Den beder om, at der (den første [1-9]) skal være ét tal mellem 1 og 9, det næste betyder, at der kan være 1 eller 2 tal mere, der skal være mellem 0 og 9.
Avatar billede Slettet bruger
03. august 2005 - 15:01 #24
Og jo, (int) betyder, at det bliver lavet til et heltal
Avatar billede Slettet bruger
03. august 2005 - 15:04 #25
Den her bør virke efter hensigten: if(!isset($tal) || !preg_match("/^[1-9][0-9]{0,2}$/", $tal))

Det vil også virke, men være mindre korrekt, at bruge den her:

if(!preg_match("/^[1-9][0-9]{0,2}$/", $tal))
Avatar billede coderdk Praktikant
03. august 2005 - 15:05 #26
Det virker lidt som overkill, synes jeg, hvad er der galt med en mindre modificeret udgave af jaws'?

if(!empty($tal) && is_int($tal) && ($tal > 0 && $tal < 1000)) {
Avatar billede Slettet bruger
03. august 2005 - 15:07 #27
du kan ikke bruge is_int, da det som brugerinput vil blive set som en streng.
Avatar billede jaw Nybegynder
03. august 2005 - 15:08 #28
Jeg vil også mene, at regulære udtryk i en forholdsvis lille kontrol som denne virker lidt voldsomt...
Avatar billede Slettet bruger
03. august 2005 - 15:11 #29
Det var derfor jeg også foreslog: if(($tal >= 1 && $tal <= 100) && ((int)$tal == $tal))
Avatar billede coderdk Praktikant
03. august 2005 - 15:11 #30
Hmm ja det er da rigtigt, så dette måske:

if(!empty($tal) && (int)$tal == $tal && ($tal > 0 && $tal < 1000)) {
Avatar billede coderdk Praktikant
03. august 2005 - 15:11 #31
ah ;)
Avatar billede learner Praktikant
03. august 2005 - 15:14 #32
Det er vigtigt at den tjekker det ordentligt, for ellers går der ged i en masse. Det skal være et tal og mellem 1 og 999. Jeg er ligeglad om det er overdrevet overkill osv. bare jeg er sikker på at det virker :o)

Jeg er virkelig glad for jeres hjælp og mon ik vi kan komme til en konklusion :o)
Avatar billede jaw Nybegynder
03. august 2005 - 15:16 #33
Sådan set behøver vi jo ikke komme til en konklusion - det bør du selv! Der kan være en masse løsninger, som alle kommer til samme resultat. Prøv løsningerne af, og se hvilken der passer bedst til dit behov :)
Avatar billede learner Praktikant
03. august 2005 - 15:19 #34
:o) jo, men i har lidt bedre fornemmelse for hvad der virker :o)
Jeg kender feks ikke preg_match og (int) ret godt
Avatar billede learner Praktikant
03. august 2005 - 15:21 #35
Okay, jeg prøver denne:
if ( (!$tal)||($tal<1)||($tal>999)||((int)$tal != $tal) ){fejl}

Takker :o)
Avatar billede learner Praktikant
03. august 2005 - 15:30 #36
duer ik! hvis jeg skriver e10 så melder den ik fejl!
Avatar billede Slettet bruger
03. august 2005 - 15:35 #37
Det skal den...
Avatar billede learner Praktikant
03. august 2005 - 15:35 #38
Nu prøver jeg så denne:
if ( (!$tal)||($tal<1)||($tal>999)||(!preg_match("/^[1-9][0-9]{0,2}$/", $tal)) ){fejl}

Spændende :o)
(jeg tror den virker)
Avatar billede learner Praktikant
03. august 2005 - 15:45 #39
det virker nu :o) :o)

Det blev denne:
if ( (!$tal)||($tal<1)||($tal>999)||(!preg_match("/^[1-9][0-9]{0,2}$/", $tal)) ){fejl}

Smid et svar og jeg deler pointene lidt ud :o)

TAK ALLE :o)
Avatar billede coderdk Praktikant
03. august 2005 - 15:48 #40
Ingen til mig :)
Avatar billede jaw Nybegynder
03. august 2005 - 16:08 #41
Der er vist ikke mange inputs fra mig i den løsning du valgte at bruge, så jeg springer også over...
Avatar billede learner Praktikant
03. august 2005 - 16:09 #42
Tak igen :o)
Avatar billede Slettet bruger
03. august 2005 - 16:15 #43
Tak for point ;o)  Jeg er ked af at jeg var den eneste der fik point, da jeg jo, på sin vis, hijackede dette spørgsmål :/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Politiets Efterretningstjeneste

Sektionsleder til IT Porteføljestyring i PET

Politiets Efterretningstjeneste

Data engineer til PET

Capgemini Danmark A/S

AI Data Architect