2012-06-07 6 views
5
function validInteger(theNumber){ 
    var anyNonDigits = new RegExp('\D','g'); 
    if(parseInt(theNumber)&&!anyNonDigits.test(theNumber)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

Sopra è una funzione che ho scritto per convalidare qualche input. Voglio tutti i numeri interi positivi. Il problema che sto affrontando è con l'oggetto RegExp. Sembra che dovrebbe essere super semplice, ma per qualche motivo non funziona.Utilizzo di un'espressione regolare per convalidare se l'input non ha cifre in esso

Ad esempio se passo 'f5' ottengo vero, ma se passo '5f' ottengo false. Ho anche problemi con il passare dei numeri negativi. -3 non viene catturato anche se stringa la variabile prima di passarla nel RegExp. Posso risolvere il problema aggiungendo "&&parseInt(theNumber)>0" nella mia istruzione if, ma ritengo che anche il RegExp dovrebbe catturarlo. Grazie in anticipo!

+1

L'espressione regolare non funziona perché è necessario sfuggire al carattere '' 'poiché' \ 'ha anche significato nella notazione stringa letterale. 'nuovo RegExp ('\\ D', 'g');' –

+0

... anche, non avresti davvero bisogno del modificatore 'g', dal momento che sembra che anche solo una non cifra dovrebbe essere sufficiente per contrassegnare il ingresso. –

+0

@amnotiam grazie per le informazioni sul perché quello che stavo facendo non funzionava. Le espressioni regolari sono qualcosa di cui sono ancora nuovo. Spero di cambiarlo presto. –

risposta

11

Semplicemente:

function validInteger(theNumber){  
    return theNumber.match(/^\d+$/) && parseInt(theNumber) > 0; 
} 

Live DEMO

O ancora più semplice con regex solo come suggerito da @Eric:

return /^[0-9]\d*$/.test(theNumber); 

Live DEMO

Aggiornamento:

An excellent cheat sheet.

+0

Non c'è bisogno di 'parseInt (theNumber)> 0':'/^ [1-9] \ d * $/' – Eric

+0

@Eric. Grazie per il suggerimento, l'ho aggiunto con il tuo nome. – gdoron

+0

Penso che la regex chiamerebbe una stringa vuota valida poiché '*' è "zero o più", potresti voler usare '+' invece "uno o più" – jbabey

1

se va bene non utilizzare RegExp, si può avere:

function validInteger(theNumber){ 
    var number = +theNumber; 

    return number > -1 && number % 1 === 0; 
} 

Supponendo che si considera 0 intero come positivi, e non si vuole fare una distinzione tra +0 e -0.

Si noti che questa funzione accetterà qualsiasi valore per theNumber che può essere convertito in un numero, quindi non solo "stringa", e ovviamente è possibile anche passare a Numero.

+0

Probabilmente vuoi dire '-1

+1

si scusa, mio ​​errore di battitura. :) – ZER0

+0

@amnotiam. C'è qualche differenza (so che fanno cose diverse) tra 'if (str.match()) 'e' if (/.../. test (str)) '? – gdoron

0

Sii semplice!

function validate(num){ 
    return (num | 0) > 0; 
}; 

Questa funzione restituirà "true" solo per numeri interi positivi.

+1

Dipende da come si desidera valutare la notazione esadecimale. '('0xff' | 0)> 0; // true' –

+1

'(" +123 "| 0)> 0' =>' true' => broken ... ':)' – gdoron