2012-05-18 2 views
6

Мне нужно взять цену с одного элемента и добавить ее в другую.Как использовать регулярное выражение для валюты

Я использую это:

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

Который, кажется, работает для $0.50, $1.00, $20.00, $200.00 но я врезался в кирпичную стену на $1,000.00 и $ 10,000.00

(Маловероятно $10,000.00 никогда не будет использоваться) ,

Запястье меня отключает.

** Редактировать **

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

Используемая платформа автоматически генерирует общее количество товаров в корзине покупок. Он визуализируется в элементе - это изменяется в зависимости от того, добавляет или удаляет пользователь.

Стоимость вряд ли пойдет в 10 000,00, потому что стоимость продукта не так высока.

Я новичок в использовании регулярного выражения, мне потребовалось достаточно времени, чтобы получить этот далекий отсюда вопрос.

Авто генерируется HTML:

<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> 

Я просто нужно $ значение в этом случае $ 115,00 - Но мне нужно работать за $ 1,000.00

+0

FYI регулярное выражение является частью JavaScript, а не конкретно JQuery. –

+1

Что должно произойти с чем-то вроде '$ 1.000,00'? –

+0

Вы не можете добавить кому в свое регулярное выражение? – jbduzan

ответ

10

Заменить non-digit и non-dot simbols по '', а затем применить parseFloat:

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

console.log(currencyValue) ; //1000.5 

UPDATE: Если 'HTML Auto генератор' генерирует действительные строки валюты, то

/\$\S+/g 

regexp достаточно, для извлечения всех валют:

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

Тогда вы могли бы преобразовать их в числа для выполнения математики на них:

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

Это на самом деле лучший ответ. Если вам нужно добавить цены, вам лучше перейти на реальные цифры, а затем переформатировать. –

+0

Он написал, что ему нужно захватить значение из одного элемента в другой, я не уверен, что он может разобрать значение. – gdoron

+1

Это конвертирует сумму в долларах в числовое значение. Это, безусловно, полезно знать, как это сделать. Однако это не поможет ему найти долларовые суммы в первую очередь. –

2

Это работает для меня:

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

DEMO

Я нашел отличное регулярное выражение, которое захватывает каждую действительную валюту и привышные это немного для ваших нужд:

/^\$[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

Это также соответствует '$ 0 ,,,,,. 0'. –

+0

@MarkByers. Исправлено, спасибо! – gdoron

+0

ОК, но все же соответствует '$ 0,0,0,0,0'. –

1

Изменить что-то вроде этого:

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

или это

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

У меня этот номер:

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

Будет соответствовать только номеру, не включая символ валюты.

+0

на самом деле это регулярное выражение неверно, поскольку оно соответствует всем номерам, а не только добавлению валюты (? <= \ $) В начале – Dmitry

+0

@Dmitry: Я заявил в своем ответе, что не соответствует валюте. Возможно, он захочет изменить свою валюту позже, и было бы лучше, если бы он не подумал об этом с RegEx. –

+0

Как я установил yuo regexp, совпадение «all number», что не означает, что оно соответствует только номерной части валюты, это, например, будет соответствовать в «Игрок под номером 47 был куплен за $ 100.00», даже 47, что явно не цена. – 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

Зачистка из $ символа валюты, а также запятая может быть легко достигнут с этим RegEx помощью замены: [^ .0-9]

Демо можно посмотреть здесь: http://rubular.com/r/Gwkx62RtLa