2010-10-15 13 views

risposta

3

È possibile utilizzare is_numeric() con l'avvertenza che accetta un po 'più di una normalmente desiderata (ad esempio 1e4).

0

Perché non usare solo is_numeric se non si ha esperienza con le espressioni regolari.

Per quanto riguarda la vostra espressione regolare: . corrisponde a tutti i caratteri, \. corrisponde a un punto. {1} non è necessario. E non ho idea di cosa stai cercando di fare con [^ ... ]. Leggi lo regular expressions tutorial se vuoi davvero usare espressioni regolari da qualche parte nel tuo codice.

20
/^-?(?:\d+|\d*\.\d+)$/ 

Questo corrisponde ai normali galleggianti, ad es. 3.14, abbreviazioni solo per la parte decimale, ad es. .5 e numeri interi ad es. 9 e numeri negativi.

+1

È necessario racchiudere l'alternanza tra parentesi, altrimenti l'ancoraggio iniziale della stringa verrà applicato solo con numeri interi e l'ancoraggio di fine stringa solo con i decimali. –

+0

Buona cattura, riparato. –

+0

Funziona anche per me per INT. Grazie. – Strabek

14

questo è quello che stai cercando per

$re = "~  #delimiter 
    ^   # start of input 
    -?   # minus, optional 
    [0-9]+  # at least one digit 
    (   # begin group 
     \.  # a dot 
     [0-9]+ # at least one digit 
    )   # end of group 
    ?   # group is optional 
    $   # end of input 
~xD"; 

questo accetta solo "123" o "123.456", non" .123" o "14e + 15". Se ti occorrono anche questi moduli, prova is_numeric

+6

+1 per commenti graduali – alex

+0

A cosa serve la D? – AntonioCS

+0

@AntonioCS è per $ fine delimitatore [ref sui modificatori PCRE] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php) 'D (PCRE_DOLLAR_ENDONLY) Se questo modificatore è impostato, un metacarattere del dollaro nel modello corrisponde solo alla fine della stringa del soggetto. Senza questo modificatore, un dollaro si trova immediatamente prima del carattere finale se si tratta di una nuova riga (ma non prima di ogni altra nuova riga).Questo modificatore viene ignorato se è impostato il modificatore m. Non esiste un equivalente a questo modificatore in Perl. FYI: x è per esteso: per sopprimere eventuali caratteri di spazi bianchi – MediaVince

5

Le espressioni regolari servono per la corrispondenza dei motivi di stringa. Se non si è in modo esplicito dopo la convalida formato della stringa di input (ma il valore effettivo), è anche possibile utilizzare

filter_var("1.33", FILTER_VALIDATE_FLOAT); 

per assicurarsi l'ingresso può essere utilizzato come un valore float. Ciò restituirà FALSE se non è un float e il valore float o intero altrimenti. Si applicano le regole type juggling.

+0

Questo non si adatta ai requisiti/descrizione OP: ad es. permette '123e-4' – salathe

+0

@salathe si, come ho detto: usalo quando sei dopo il * valore *. Non usarlo se si è dopo aver convalidato il * formato stringa *. '123e-4' è ancora un float (' 0.123'). – Gordon

1

Questa espressione regolare:

\d*(?:\.\d+)? 

darà risultati:

123 -> true 
123.345 -> true 
123. -> true 
.345 -> true 
0.3345 -> true 

Tuttavia, è necessario verificare il vuoto dell'ingresso prima di usarlo, perché l'espressione regolare permesso anche lunghezza zero ingresso.