Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176

    Is Numerc e Carattere (e)

    Salve a tuttti.

    Sto usando la funziona is_numeric per vedere se un codice inserito in un form (in questo caso un cap postale) è numerico o meno.

    Il codice è abbastanza banale ed è il seguente:

    codice:
    if (is_numeric($var_cap)) {
            echo "E' un numero";
    } else {
            echo "Non è un numero";
    }
    Dove la variabile $var_cap recupera in post i dati.

    Ora inserendo come variabile un valore 1234j oppure oppure 1234e oppure 12jkf oppure rtygh o etc... mi dice che non è numerico e sembra andare in maniera perfetta.

    Al contrario se inserisco tipo 123e4 mi dice che è numerico.

    In poche parole se inserisco un numero con la e nel mezzo mi dice che è numerico... se sposto la e in fondo in cima mi dice di no.

    Qualcuno sa dirmi il perchè?

    Grazie
    Ciao
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    mi pare che sia per via della notazione scientifica? Controlla sul sito di php, comunque, per l'input di dati numerici...

    in altre parole 15E3 è equivalente a 15 x 10^3 (15 moltiplicato 10 alla 3).

    Puoi comunque ovviare al controllo con una espressione regolare /\d{5}/
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    esatto
    Usa if(preg_match("/^\d{5}$/",$var))
    E sei sicuro che accetta solamente 5 caratteri numerici

  4. #4
    Evidentemente lo interpreta come un numero in formato scientifico:

    ad es. 1.23e002

    Io uso questa funzione, se può esserti utile.

    /* Tale funzione ritorna TRUE se la stringa non contiene numeri e se non vi sono spazi tra
    un carattere ed il successivo, FALSE altrimenti */

    function non_numerico($stringa)
    {

    $len = strlen($stringa);

    $i=0;

    $escludi = "no";

    while ($i<$len)
    {
    $char = substr($stringa,$i,1);

    if (!eregi ("[0-9]", $char))
    {
    $escludi = "yes";
    break;
    }

    $i++;
    }

    return ($escludi == "yes");
    }


    Molto probabilmente è possibile utilizzare solo il comando eregi in maniera un pò più complessa, in modo tale che questo controllo è possibile farlo solo con una istruzione. Questa è la prima soluzione che mi è venuta in mente e non avendo tempo non ho provveduto ad informrmi. Se riesci postamela.

    Ciao. Ciao.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Codice PHP:
    if(preg_match("/^\\d{5}$/",$var))
      echo 
    "numerico intero";
    else
      echo 
    "non numerico intero"

  6. #6
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176
    Originariamente inviato da Leilond
    Codice PHP:
    if(preg_match("/^\\d{5}$/",$var))
      echo 
    "numerico intero";
    else
      echo 
    "non numerico intero"
    Ti ringrazio tantissimo e mi farebbe piacere capire questa cosa che hai fatto.

    Ho provato a guardare in giro la funzione preg_match ma non è che ci abbia capito molto.

    Potete magari spiegarla a parole tipo: (i due slash vogliono dire che bla bla... il d{5} vuol dire 5 parole e il d significa bla bla...)

    Se potete vi ringrazio tantissimo.


    Ciao
    Luca
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Originariamente inviato da Leilond
    Codice PHP:
    if(preg_match("/^\\d{5}$/",$var))
      echo 
    "numerico intero";
    else
      echo 
    "non numerico intero"
    Prima di tutto ti consiglio questa guida
    http://php.html.it/articoli/leggi/85...ioni-regolari/
    Poi passiamo a spiegare le cose

    preg_match è una funzione che confronta una stringa con una "regola", ovvero ti dice se una stringa è costituita da una serie determinata di caratteri, stringhe e sottostringhe

    Nello specifico vediamo la "regola" che ho inserito
    "/^\d{5}$/"

    Il primo "/" dice "inizia la regola"

    Il carattere "^" dice "inizio della stringa"
    Questo perchè preg_match può cercare "occorrenze della regola" anche in mezzo e gli si deve dire che la stringa che cerchiamo non deve avere niente prima. Se non mettessimo quel carattere preg_match prenderebbe come valida questa stringa: "aaaa12345"

    "\d" significa "digit" ed indica la presenza di un carattere 0-9. Potevo sostituirla anche con "[0-9]"

    {5} significa "la cosa scritta prima deve ripetersi 5 volte". Nel nostro caso la "cosa scritta prima" è "\d"

    "$" significa "fine della stringa".
    Questo perchè dobbiamo dire a preg_match che dopo la serie di caratteri che rispetta la regola non deve esserci altro. Se omettessimo il "$" preg_match prenderebbe come valida questa stringa: "12345aaaa"

    l'ultimo "/" dice "fine della regola"

    Guardati la guida che ti ho dato, poichè con le espressioni regolari possono essere fatte davvero MOLTE cose
    Ad esempio voglio assicurarmi che il nickname scelto dall'utente sia fatto così:
    - Inizi con una lettera maiuscola o minuscola
    - Contenga solo lettere, numeri e il carattere "_"
    - Si lunga da 4 a 15 caratteri
    Ecco come faccio
    Codice PHP:
    if(preg_match("/^[a-zA-Z][a-zA-Z0-9_]{3,14}$/",$nick))
      echo 
    "Corretto";
    else
      echo 
    "Non corretto" 
    Per verificare che una mail inserita dall'utente sia scritta con questa sintassi
    xxx.uuu.xxx@aaa.bbb.ccc senza limiti al numero di volte che appare il punto
    con "xxx" "aaa" che deve iniziare con una lettera e sono ammessi solo lettere numeri e "_"
    Codice PHP:
    $alfa "[a-zA-Z]";
    $alfanum "[a-zA-Z0-9_]+";
    $alfastart "$alfa$alfanum";
    $regola "/^$alfastart(\\\\.$alfanum)*@$alfastart(\\\\.$alfanum)+$/";
    echo 
    "$regola
    "
    ;
    if(
    preg_match($regola,$mail))
      echo 
    "E' una mail";
    else
      echo 
    "Non è una mail"
    La regola risultante è
    "/^[a-zA-Z][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*@[a-zA-Z][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/"

    Se voglio ad esempio ammettere che le mail inizino con numeri o "_" basta sostituire
    $alfastart con $alfanum all'inzio della regola... e via dicendo si possono creare regole per gestire un'innumerevole quantità di "validazioni"
    Sono fondamentali per la validazione dell'input digitato, poichè non puoi mai fidarti di quello che scrive l'utente
    Primo perchè l'utente può semplicemente "sbagliare"
    Secondo perchè se non attentamente validato, l'input utente può anche essere un "attacco al sito" con "sql injection" e "cross site scripting"
    Per questi due concetti vedi questa guida
    http://php.html.it/guide/leggi/121/g...urezza-di-php/

  8. #8
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176
    Grazie Mille... ce ne fosse di gente così.



    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.