6

ある要素から価格を取得し、それを別の要素に追加する必要があります。

私はこれを使用しています:

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

$0.50$1.00$20.00でうまくいくようですが、 10,000.00 ドル$200.00というレンガの壁にぶつかりました。$1,000.00

(おそらく$10,000.00使用されることはありません)。

コンマは私をつまずかせています。

** 編集 **

私は1時間離れて、たくさんの答えに戻ってきました。それらを検討する前に、すべてのコメントに答えるのではなく、明確にしたいと思いました。

使用されているプラ​​ットフォームは、ショッピング カート内のアイテムの合計値を自動生成します。要素でレンダリングされます。これは、ユーザーがアイテムを追加または削除しているかどうかによって異なります。

製品コストがそれほど高くないため、値が 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 で機能するにはそれが必要です

4

6 に答える 6

11

non-digitnon-dot記号をに置き換えてから''、 を適用しparseFloatます。

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

console.log( currencyValue ) ;   //1000.5

更新:「HTML 自動ジェネレーター」が有効な通貨文字列を生成する場合、

/\$\S+/g

すべての通貨を抽出するには、正規表現で十分です。

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

次に、それらを数値に変換して、それらに対して数学を実行できます。

var currenciesAsNumbers = currencies.map( function(item){
    return parseFloat( item.replace(/[^\d\.]/g,'') );
});    // [115]
于 2012-05-18T08:21:04.307 に答える
2

これは私のために働いています:

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

デモ

すべての有効な通貨を取得し、ニーズに合わせて少しカスタマイズした優れた正規表現を見つけました。

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

デモ

正規表現のソース

于 2012-05-18T08:16:55.817 に答える
1

次のように変更します。

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

またはこれ

 \$\d{1,3}(,\d{3})*(?:\.\d+)?
于 2012-05-18T08:17:51.513 に答える
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'));
于 2012-05-18T08:19:38.593 に答える
0

私はこれを手に入れました:

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

通貨記号を含まず、数字のみに一致します。

于 2012-05-18T08:18:31.427 に答える