Avatar billede learner Praktikant
15. juni 2004 - 16:57 Der er 15 kommentarer og
1 løsning

Hvordan laver jeg et script der validerer om det er et nummer?

Jeg har brug for at validere om en værdi er et nummer... Der må ikke være tegn eller mellemrum eller bogstaver....

Jeg kan sku ik lige finde på en holdbar løsning. Håber du evt kan smide mig lidt inspiration!

Tak mvh Michael (learner)
Avatar billede taskmgr Nybegynder
15. juni 2004 - 17:00 #1
if(is_numeric($tal)){
  echo "ja, det er et tal";
}
Avatar billede dennismp Nybegynder
15. juni 2004 - 17:03 #2
Bare vær' opmærksom på at "1e222" også accepteres som tal. Ellers brug ctype_digit($tal);
Avatar billede taskmgr Nybegynder
15. juni 2004 - 17:04 #3
is_int() - hvis du vil vide om det er et heltal
is_float() - hvis du vil vide om det er et kommatal
Avatar billede dennismp Nybegynder
15. juni 2004 - 17:12 #4
Forskellen på is_int/is_float er at de tester på typen af variablen og ikke indholdet, så is_int("1") vil være falsk men is_int(1) vil være sandt... Alle variabler der kommer fra brugeren (via $_GET/POST osv) er strings så begge vil returnerer falsk.
Avatar billede whistler Nybegynder
15. juni 2004 - 17:13 #5
Hentet fra http://www.php.net/is_numeric :

<?php
/* This function is not useful if you want
to check that someone has filled in only
numbers into a form because for example
4e4 and 444 are both "numeric".

I used a regular expression for this problem
and it works pretty good. Maybe it is a good
idea to write a function and then to use it.

$input_number = "444"; // Answer 1
$input_number = "44 "; // Answer 2
$input_number = "4 4"; // Answer 2
$input_number = "4e4"; // Answer 2
$input_number = "e44"; // Answer 2
$input_number = "e4e"; // Answer 2
$input_number = "abc"; // Answer 2
*/
$input_number = "444";

if (preg_match ("/^([0-9]+)$/", $input_number)) {
    print "Answer 1";  //// is_numeric TRUE
} else {
    print "Answer 2";  //// is_numeric FALSE
}
?>

Den sikrer dig at input kun kan indeholde tegnene 0-9 og ikke 1e5 fx :)

//Geert
Avatar billede learner Praktikant
15. juni 2004 - 18:14 #6
Whistler...

Jeg har osse fundet det samme :-) men jeg zappede vist bare forbi det.. :-)
det virker næsten, men man kan jo skrive 001, har du en løsning på det os?

eks
^[1-9][0-9]...
Avatar billede whistler Nybegynder
15. juni 2004 - 18:22 #7
Øh... den simple løsning:

<?php

  $input_number = "004";

  if (preg_match ("/^([0-9]+)$/", $input_number)) {
    print "Answer 1: " . (int) $input_number;  //// is_numeric TRUE; typecast to INTEGER to remove 0's
  } else {
    print "Answer 2";  //// is_numeric FALSE
  }

?>


//Geert
Avatar billede learner Praktikant
15. juni 2004 - 19:07 #8
ja,
Avatar billede learner Praktikant
15. juni 2004 - 19:09 #9
Tak, det virker fint. Nu validerer den om det er et nummer, og der kan ikke forekomme tegn eller bogstaver. Mange tak for det! :-)
Avatar billede dennismp Nybegynder
15. juni 2004 - 20:40 #10
Hvorfor ikke bruge ctype_digit ? Det er simplere og hurtigere og giver samme effekt som den preg_match. Anyway, nu skal jeg nok holde op :)
Avatar billede sukos Juniormester
15. juni 2004 - 21:34 #11
denninsmp -> Det er jo det med at kende til alle de funktioner som der i PHP :O)
Avatar billede learner Praktikant
15. juni 2004 - 23:06 #12
bla bla bla :-)

I er vel os startet et sted :-)
Avatar billede whistler Nybegynder
16. juni 2004 - 02:06 #13
dennismp:

Hehe, jamen du har da sådan set ret :) Jeg var faktisk ikke klar over ctype extensionet. Tak for det tip :)

Men - omvendt - så kan man godt (hvis man nu skal) argumentere for brugen af preg i stedet for ctype :) ctype er jf. manualen først enablet som default fra PHP 4.2.0 og frem :)

//Geert
Avatar billede dennismp Nybegynder
16. juni 2004 - 10:13 #14
Nu kom ctype_digit ind som 2. kommentar, så jeg blev lidt forbløffet over at fokus er på underlige pregs :).

Man kan bedre argumenterer at php 4.2.0 skal opgraderes for at undgå de fejl og huller der er blevet rettet senere :)
Avatar billede taskmgr Nybegynder
16. juni 2004 - 10:54 #15
...især når vi nu er i en version 4.3.7 og et stable release af PHP 5 endda er på vej :)
Avatar billede sukos Juniormester
16. juni 2004 - 18:00 #16
ehh, jeg havde nu helelr aldrig hørt om ctype_digit førend nu :O)
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