2009-06-12 2 views
4

У меня есть куча строк, извлеченных из html, используя jQuery.Javascript, извлекающий номер из строки

Они выглядят так:

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

Мне нужно извлечь числовые значения для того, чтобы вычислить разницу в цене.

(Я направиться с ≈

var productPriceDiff = DKK 100"; 

или просто:

var productPriceDiff = 100";)

Может кто-нибудь помочь мне сделать это?

Спасибо, Jakob

+1

ли ваши номера всегда будет в подобном формате? Вы можете использовать регулярное выражение, чтобы захватить только часть числа, а затем создать новый Number() со строкой. – Kekoa

ответ

10

Сначала вам нужно будет преобразовать входные цены от строк в числа. Затем вычтите. И вам придется преобразовать результат обратно в формат «DKK ###, ##». Эти две функции должны помочь.

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

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

Тогда вы можете сделать это:

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

Работает отлично! (-: Огромное спасибо – 2009-06-15 08:23:32

+0

Просто понял, что он не работает с более высокими ценами, такими как «DKK 1.299,95». – 2009-06-15 10:58:58

+0

Хорошо, я исправил его для работы с более высокими ценами, сняв все периоды, прежде чем делать что-либо еще. Я не исправил функцию formatPrice. Он вернет действительную цену, но без периодов («DKK 1299,95»). Если вам нужна помощь в этом, задайте другой вопрос. :-) –

5

попробовать:

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

редактировать: это будет получить цену, включая цифры, запятые и периоды. он не проверяет правильность формата числа или числа, периоды и т. д. являются смежными. Если вы можете быть более точным в определениях точных чисел, которые вы используете, это поможет.

+1

Довольно уверен, что вам нужно убежать от этого периода. – inkedmn

+1

уверен, что вы этого не сделали. он находится внутри []. вне этого, и ему нужно было бы ускользнуть. просто протестирован в firefox и работает как ожидалось. –

2

попробовать также:

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

Это должно сделать productCurrentPrice фактическое число вы после этого (если я правильно понимаю ваш вопрос).

+1

не работает с запятыми, как указано в его примере формата чисел для датских кронеров. –

Смежные вопросы