2012-05-18 17 views
6

Ho bisogno di prendere un prezzo da un elemento e aggiungerlo a un altro.Come usare espressioni regolari per valuta

Sto usando questo:

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

che sembra funzionare per $0.50, $1.00, $20.00, $200.00 ma mi ha colpito un muro di mattoni su $1,000.00 e $ 10,000.00

(Improbabile sarà mai essere usato $10,000.00) .

La virgola mi fa inciampare.

** Modifica **

sono andato via per un'ora per tornare a cumuli di risposte. Prima di passare attraverso di essi ho pensato di chiarire piuttosto che rispondere a tutti i commenti:

La piattaforma utilizzata genera automaticamente il valore totale degli articoli in un carrello. Viene visualizzato in un elemento: questo cambia a seconda che un utente aggiunga o rimuova gli elementi.

È improbabile che il valore scenda a 10.000,00 perché i costi del prodotto non sono così alti.

Sono nuovo ad usare il regex mi ci è voluto abbastanza tempo per arrivare a questo lontano, quindi la domanda.

Auto HTML generato:

<span vertical="False" quote="False" id="catCartSummary"> 
    <table cellspacing="0" class="cartSummaryTable"> 
    <tbody> 
     <tr> 
     <td class="cartSummaryItem">3 item(s), Total: $115.00 <a href="#" class="cartSummaryLink">View Cart</a></td> 
     </tr> 
    </tbody> 
    </table> 
</span> 

Ho solo bisogno il valore $ in questo caso $ 115.00 - Ma ho bisogno di lavorare per $ 1,000.00

+0

FYI regex è parte di javascript, non specificamente jQuery. –

+1

Cosa dovrebbe succedere con qualcosa come $ 1.000,00? –

+0

non puoi aggiungere un coma nella tua espressione regolare? – jbduzan

risposta

10

Sostituire non-digit e non-dot simboli da '', quindi applicare parseFloat:

var currencyValue = parseFloat("$1,000.50".replace(/[^\d\.]/g,'')); 

console.log(currencyValue) ; //1000.5 

UPDATE: Se il 'generatore HTML Auto' genera stringhe di valuta validi, quindi

/\$\S+/g 

regexp è sufficiente per estrarre tutte le valute:

var currencies = $('#cartSummaryItem').text().match(/\$\S+/g); // ["$115.00"] 

Poi si potrebbe convertirli in numeri per l'esecuzione di matematica su di loro:

var currenciesAsNumbers = currencies.map(function(item){ 
    return parseFloat(item.replace(/[^\d\.]/g,'')); 
}); // [115] 
+0

Questa è in realtà la migliore risposta. Se è necessario aggiungere i prezzi, è meglio convertirli in numeri reali, quindi riformattare. –

+0

Ha scritto che ha bisogno di prendere il valore da un elemento a un altro, non sono sicuro che possa analizzare il valore. – gdoron

+1

Converte un importo in dollari in un valore numerico. Questo è certamente utile per sapere come fare. Tuttavia non lo aiuterà a trovare gli importi in dollari in primo luogo. –

2

Questo è il lavoro per me:

/\$\d+(,\d+)*(?:\.\d+)?/g 

DEMO

Ho trovato un'eccellente regex che afferra tutte le valute valide e customed un po 'per le vostre esigenze:

/^\$[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:\.[0-9]{2})?|(?:\.[0-9]{3})*(?:,[0-9]{2})?)$/g 

DEMO

The source of the regex

+1

Questo corrisponderebbe anche a '$ 0 ,,,,,. 0'. –

+0

@MarkByers. Risolto, grazie! – gdoron

+0

OK, ma corrisponde comunque a '$ 0,0,0,0.0'. –

1

Modifica per qualcosa di simile:

\$(?:\d{1,3},)*\d+(?:\.\d+)? 

o questo

\$\d{1,3}(,\d{3})*(?:\.\d+)? 
0

Ho ottenuto questo:

^\d{1,3}(,\d{3})*(\.\d+)?$ 

Corrisponde al numero solo, escluso il simbolo di valuta.

+0

in realtà questa espressione regolare non è corretta in quanto corrisponde a tutti i numeri, non solo la valuta aggiunta (? <= \ $) Nell'inizio – Dmitry

+0

@Dmitry: nella mia risposta ho indicato che non corrisponde alla valuta. Potrebbe voler cambiare la sua valuta in un secondo momento, e sarà meglio se non lo calcolasse con RegEx. –

+0

Come ho stattato yuo regexp corrisponde a "tutto il numero", il che non significa che corrisponde solo alla parte numerica della valuta, questo per esempio corrisponderà in "Il giocatore sotto il numero 47 è stato comprato per $ 100,00" stringa 47 anche, che ovviamente non un prezzo. – Dmitry

1
var re = /^\d{1,3}(\,\d{3})*(?:\.\d+)?$/; 

console.log(re.test('0.50')); 
console.log(re.test('1')); 
console.log(re.test('20.50')); 
console.log(re.test('200.50')); 
console.log(re.test('2,000')); 
console.log(re.test('2,000.50')); 
console.log(re.test('20,000')); 
console.log(re.test('20,000.00')); 
console.log(re.test('1,000,000')); 
console.log(re.test('1,000,000.50')); 
1

Al netto di $ simbolo di valuta, così come la virgola può essere facilmente raggiunto con questo RegEx utilizzando sostituire: [^ 0,0-9]

Demo disponibile qui: http://rubular.com/r/Gwkx62RtLa