2009-06-12 6 views
4

J'ai un tas de chaînes extraites de html en utilisant jQuery.Javascript extrait le numéro de la chaîne

Ils ressemblent à ceci:

var productBeforePrice = "DKK 399,95"; 
var productCurrentPrice = "DKK 299,95"; 

J'ai besoin d'extraire les valeurs numériques afin de calculer la différence de prix.

(Je Wend avec ≈

var productPriceDiff = DKK 100"; 

ou tout simplement:

var productPriceDiff = 100";)

Quelqu'un peut-il me aider à faire cela?

Merci, Jakob

+1

Vos chiffres vont toujours être dans un format similaire? Vous pouvez utiliser une expression régulière pour saisir uniquement la partie numérique, puis créer un nouveau nombre() avec la chaîne. – Kekoa

Répondre

10

Vous devez d'abord convertir les prix d'entrée des chaînes en chiffres. Puis soustraire. Et vous devrez convertir le résultat en format "DKK ###, ##". Ces deux fonctions devraient aider.

var priceAsFloat = function (price) { 
    return parseFloat(price.replace(/\./g, '').replace(/,/g,'.').replace(/[^\d\.]/g,'')); 
} 

var formatPrice = function (price) { 
    return 'DKK ' + price.toString().replace(/\./g,','); 
} 

Ensuite, vous pouvez le faire:

var productBeforePrice = "DKK 399,95"; 
var productCurrentPrice = "DKK 299,95"; 
productPriceDiff = formatPrice(priceAsFloat(productBeforePrice) - priceAsFloat(productCurrentPrice)); 
+0

Fonctionne parfaitement! (-: Merci beaucoup –

+0

Je viens de réaliser qu'il ne fonctionne pas avec des prix plus élevés comme "DKK 1.299,95" –

+0

Bon, je l'ai réparé pour travailler avec des prix plus élevés en dépouillant toutes les périodes avant de faire quoi que ce soit d'autre. Je n'ai pas corrigé la fonction formatPrice.Il retournera un prix valide, mais sans les périodes ("DKK 1299,95") .Si vous avez besoin d'aide pour cela, posez une autre question. –

5

essayer:

var productCurrentPrice = productBeforePrice.replace(/[^\d.,]+/,''); 

edit: cela obtenir le prix y compris les numéros, les virgules et les périodes. il ne vérifie pas que le format de nombre est correct ou que les nombres, les périodes, etc. sont contigus. Si vous pouvez être plus précis dans les définitions de nombre exact que vous expcet, cela aiderait.

+1

Assez sûr que vous avez besoin d'échapper à cette période, en fait. – inkedmn

+1

assez sûr que non. c'est à l'intérieur du []. en dehors de cela et il aurait besoin d'échapper. juste testé dans Firefox et il fonctionne comme prévu –

2

Essayez aussi:

var productCurrentPrice = productBeforePrice.match(/\d+(,\d+)?/)[0]; 
1
var productCurrentPrice = parseInt(productBeforePrice.replace(/[^\d\.]+/,'')); 

Cela devrait faire productCurrentPrice le nombre réel que vous êtes après (si je comprends bien votre question).

+1

échoue sur les virgules comme prévu dans son exemple de format numérique pour les couronnes danoises. –

Questions connexes