2010-02-09 8 views
19

Si prega di aiutare con me scrivendo una JavaScript Convalida per il campo valuta/denaro.Convalida valuta

Quindi, si prega di fornire eventuali espressioni regolari se u avere :)

Inoltre, per la mia regione, non hanno bisogno di simboli di valuta come '$' nel campo.

Solo i decimali devono essere inclusi per la convalida come caratteri speciali., Insieme ai numeri.

+0

è la parte dopo il punto decimale facoltativo? è '103.5' valido, o dovrebbe essere' 103.50'? – Amarghosh

+0

parte dopo decimale è facoltativo. – dev646

risposta

32

Si potrebbe usare un espressione regolare:

var regex = /^\d+(?:\.\d{0,2})$/; 
var numStr = "123.20"; 
if (regex.test(numStr)) 
    alert("Number is valid"); 

Se non sei cercando di essere il più severo con le cifre decimali che si potrebbe trovare più facile usare l'unario (+) all'operatore di lanciare ad un numero di check it di validità:

var numStr = "123.20"; 
var numNum = +numStr; // gives 123.20 

Se la stringa numero non è valido, esso tornerà NaN (Not un numero), qualcosa che si può verificare facilmente:

var numStr = "ab123c"; 
var numNum = +numStr; 
if (isNaN(numNum)) 
    alert("numNum is not a number"); 

Sarà, naturalmente, consentire a un utente di aggiungere più cifre decimali, ma si può tagliare qualsiasi supplementare fuori usando number.toFixed(2) per arrotondare a 2 cifre decimali. parseFloat è molto meno rigido con l'input e colpirà il primo numero che può trovare da una stringa, purché quella stringa inizi con un numero, ad es. parseFloat("123abc") darebbe 123.

+1

wow ... sentirsi meglio ora ... è stato bello ... Grazie! – dev646

+3

regex utilizzato per verificare la validità della stringa non accetta virgole. Usa /^[1-9]\d*(((,\d{3}){1})?(\.\d{0,2})?)$/ invece. – Redtopia

1
/[1-9]\d*(?:\.\d{0,2})?/ 

[1-9] - must start with 1 to 9 
\d* - any number of other digits 
(?:)? - non capturing optional group 
\. - a decimal point 
\d{0,2} - 0 to 2 digits 

funziona per te? o forse parseFloat:

var float = parseFloat(input); 
+2

Non penso che 'parseFloat' o' parseInt' siano così utili per la validazione, analizzeranno stringhe come "123abc" come "123". Inoltre, il tuo regex verifica true sulla seguente stringa: "" a01.9bc "', devi aggiungere '^' e '$' per abbinare rispettivamente l'inizio e la fine della stringa. In realtà, anche allora una stringa come "0.91" non funzionerà. –

+0

Sì, hai ragione, Andy E ha fornito una risposta migliore – meouw

25

Ho costruito la mia risposta dalla risposta accettata.

var regex = /^[1-9]\d*(((,\d{3}){1})?(\.\d{0,2})?)$/;

^[1-9] Il numero deve iniziare con 1-9
\d* Il numero può quindi avere un numero qualsiasi di qualsiasi cifra
(...)$ sguardo al gruppo successivo dalla fine (...)$
(...)?(...)? cercare due gruppi facoltativamente. Il primo è per la virgola, il secondo è per il decimale.
(,\d{3}){1} Cerca una occorrenza di una virgola seguita esattamente da tre cifre
\.\d{0,2} Cerca un decimale seguito da zero, una o due cifre.

Questa espressione regolare funziona fuori di queste regole:

  • valori validi sono numeri 0-9, virgola e punto decimale.
  • Se un cliente immette più di un punto decimale o più di una virgola, il valore non è valido e non sarà accettato.

  • Esempi di input non valido valori

    • 1.2.3
    • 1,2,4
  • Esempi di input valido valori
    • 1,23
    • 1.000
    • 3967.
    • 1,2
    • 999,999.99

Un esempio può essere visto qui: http://jsfiddle.net/rat141312/Jpxu6/1/

UPDATE

cambiando la [1-9] nella regex per [0-9] qualsiasi numero meno di 1 può anche essere convalidato. Esempio: 0.42, 007

+0

Utile! In combinazione con la risposta accettata, si è rivelata una buona soluzione per un problema che stavo avendo. –

+2

... tranne che non consente numeri inferiori a 1.00. –

+2

Andy, hai visto il tuo commento in ritardo. Hai ragione :(non sono ammessi valori inferiori a 1. Cambiando il numero da 1 a 9 a 0-9 funzionerà: – Sababado

0

Per me il suo bel lavoro per la valuta indiana in INR

var regex = /^[1-9]{0,2}(,{0,1})(\d{2},)*(\d{3})*(?:\.\d{0,2})$/; 
var a = '1,111.11'; 
regex.test(a);