2009-11-22 7 views
159

Voglio verificare se una stringa contiene solo cifre. Ho usato questo:Verificare se la stringa contiene solo le cifre

var isANumber = isNaN(theValue) === false; 

if (isANumber){ 
    .. 
} 

.. ma ho capito che consente anche + e -. Fondamentalmente voglio assicurarmi che l'input contenga SOLO cifre e nessun'altra lettera. Poiché +100 e -5 sono entrambi i numeri, isNaN, non è la strada giusta da percorrere. Forse una regexp è quello che mi serve? Qualche consiglio?

risposta

348

come su

var isnum = /^\d+$/.test(val); 
+4

Date un'occhiata a questo post ... http://stackoverflow.com/questions/18082/validate -numbers-in-javascript-isnumeric – Jorge

+10

Dovresti usare [0-9] invece di \ d per essere più chiaro. \ d intende corrispondere a qualsiasi tipo di cifra, compresi quelli di altre lingue, anche se penso che JavaScript sia un'eccezione dove \ d è solo 0-9. – mukunda

+0

Questo è fantastico! Sono curioso \ d non si riferisce a cifre che sono decimali? – dewwwald

2

Beh, si può utilizzare la seguente espressione regolare:

^\d+$ 
40
string.match(/^[0-9]+$/) != null; 
9
String.prototype.isNumber = function(){return /^\d+$/.test(this);} 
console.log("123123".isNumber()); // outputs true 
console.log("+12".isNumber()); // outputs false 
4

Questo è ciò che si vuole

function isANumber(str){ 
    return !/\D/.test(str); 
} 
4

Se si desidera supportare anche per valori float (Dot valori separati) allora si può usare questa espressione:

var isNumber = /^\d+\.\d+$/.test(value); 
+0

tuttavia se non usi un float piuttosto int restituirà false magari usando "?" dopo ". \" ha risolto quello. Suggerisco questo /^\d+[\.,\,]?\d+$/.test(valore) per consentire sia la virgola che il punto decimale (più tardi forse può trasformare virgola a punto) – Lucke

+0

@Lucke, la regex che hai suggerito sarà solo essere in grado di trovare numeri con un decimale o superiore a 9. Se si modifica il primo '\ d +' a '\ d *?', sarà in grado di corrispondere 0 - 9, così come numeri come .333 –