2017-01-18 2 views
0

合計金額を含む2つのフィールドを比較する必要があるという要件があります。流出して複数の通貨記号を解析して削除する方法

フィールドの1つは、$1000(通貨記号の後ろに金額が続きます)などの金額を表します(例:US $100の場合、€100の場合)。

私は、異なる国の金額を持つことができるフィールドを解析する必要があります。 JQueryを使ってどうすればいいですか?

後、私は現在、使用していますjQueryのです:

var Amt= parseFloat(total.split('$')); 
+1

「spilt」関数がありますか? :) –

+2

@cale_bええ、それはfiledsで動作します – j08691

+0

あなたは '[1]'を使う必要があります。 –

答えて

1

split関数は、正規表現で取ることができます。 $記号は特殊文字なので、バックスラッシュでエスケープする必要があります。別の通貨記号については、|記号を使用してORを表します。

split関数は配列を返し、通貨記号で分割しているため、シンボルは空の文字列""に変換されます。この場合、filterはtruey値の文字列のみを表示します。

あなたが探しているものが正確かはわかりませんが、私は役に立つと思うスニペットを作成しました。

var euroTotal = document.getElementById("euro-cost"); 
 
var usTotal = document.getElementById("us-cost"); 
 
var peruTotal = document.getElementById("peru-cost"); 
 
var euroResult = document.getElementById("euro-result"); 
 
var usResult = document.getElementById("us-result"); 
 
var peruResult = document.getElementById("peru-result"); 
 

 
// Create a regex with currency symbols. Separate symbols with | 
 
var moneyRegex = /[A-Z]{0,2}\$|€|¥|₩|£|CHF|¢|฿|L|Q|₭|₮|₨|₱|Kč|Ft|Rp|лв|RM|MT|₦|Gs|zł|lei|S\/\./; 
 

 
euroResult.innerHTML = `Parsed, ${euroTotal.innerHTML} equals: ` + 
 
        parseFloat(euroTotal.innerHTML.split(moneyRegex).filter(Boolean)); 
 

 
usResult.innerHTML = `Parsed, ${usTotal.innerHTML} equals: ` + 
 
        parseFloat(usTotal.innerHTML.split(moneyRegex).filter(Boolean)); 
 

 
peruResult.innerHTML = `Parsed, ${peruTotal.innerHTML} equals: ` + 
 
parseFloat(peruTotal.innerHTML.split(moneyRegex).filter(Boolean));
<h3>Item Costs</h3> 
 

 
<p>This item costs <span id="euro-cost">€400</span></p> 
 
<p>This item costs <span id="us-cost">$300</span></p> 
 
<p>This item costs <span id="peru-cost">S/.200</span></p> 
 

 
<h3>Parsing Currency Values</h3> 
 

 
<p id="euro-result"></p> 
 
<p id="us-result"></p> 
 
<p id="peru-result"></p> 
 

 
<p><strong>Feel free to play around with different currencies</strong></p>

あなたは、いくつかの他の通貨記号で遊んことができ、この機能は彼らに

+0

ありがとう、それは正常に動作します。私は別の通貨(S /。)を持っています。どのように私は上記のステートメントにそれを含めるか。 – user5113176

+0

この通貨記号の場合S /。 、それが(/)と(。)を持っているので、上記は機能しません。 – user5113176

+0

S \。ペルー通貨です。私はそれを働かせるtryngです – user5113176

0

を削除する必要があります私はsplitこれを行うための最善の方法だとは思いません。 matchまたはexecを使用します。リチャード・ハミルトンの正規表現をPlagiarisingと変更:

var match moneyString.match(/([A-Z]{0,2}\$|CHF|[€¥₩£¢฿LQ₭₮₨₱₦]|Kč|Ft|Rp|лв|RM|MT|Gs|zł|lei|S\/\.)(.*)/); 
if (! match) { 
    // handle error 
} else { 
    var currency = match[1]; 
    var amt = parseFloat(match[2]); 
} 

このアプローチは、より厳密な構文チェックを行う通貨記号の前に-を許可し、小数点以下2桁に制限し、通貨記号が正しいことを確認し、作成するように変更します文字列全体が一致していることを確認してください。

関連する問題