2012-11-12 22 views
7

Sto provando a scrivere un'espressione regolare per le stringhe che sono numeri in JSON. Sono ancora nuovo nella scrittura di espressioni regolari, ho trovato un diagramma di una macchina per i numeri JSON here, ma non sono sicuro di come attaccarlo.Numeri JSON Espressione regolare

Ecco alcune stringhe che dovrebbero essere trovate dalla regex. "22", "55,75,466 mila", "-44,565" "55e-2" "69234,2423,432 mila E78" Ogni aiuto è apprezzato!

+1

Probabilmente si dovrebbe spiegare che cosa si intende per "le stringhe che sono numeri in JSON", di preferenza con un esempio. Anche i "numeri JSON" sono un po 'sconcertanti. –

+2

Secondo json.org il tuo ultimo esempio non dovrebbe essere considerato un numero dovuto allo spazio. –

risposta

16

Per riferimento, ecco lo schema di "numero" da http://www.json.org/fatfree.html:

JSON number

L'espressione regolare che deve corrispondere questo è: risposta

-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)? 
+0

potresti, o qualcuno mi spiegherà come hai ottenuto la risposta? –

+2

Ho appena seguito lo schema, da sinistra a destra. Ad esempio, per prima cosa scegli tra scendere per incontrare un '-', o andare dritto, saltare il' -'. In regex questo può essere rappresentato come '-?', O, "Zero o uno' -'s. " Quindi, il percorso si divide nuovamente, tra un '0' e una serie di cifre che iniziano con un' 1' (in modo da evitare numeri come '0123' poiché JSON non supporta ottale). In regex questo può essere rappresentato da "alternazione", che assomiglia a questo: '' (?: Xxx | yyy) '' dove 'xxx' e' yyy' sono possibili "percorsi". E così via. Se hai bisogno di una spiegazione più approfondita della regex, faccelo sapere. –

+0

neg segno "-" di per sé è un numero json valido in base alla tua regex. non sarebbe un errore – drgs

1

di acheong87 dovrebbe fornire l'espressione regolare che si richiedono. Tuttavia, se si sta solo cercando di verificare se una stringa restituita tramite JSON "è un numero", allora si può fare questo:

var valueAsString = "55e-2"; 
var isANumber = !isNaN(valueAsString); 
Problemi correlati