2009-04-20 9 views
0

フレンド、正規表現をJavascriptで置き換える方法

私はJavaScriptと正規表現の両方を使いこなしています。

JavaScript関数内で、カンマ(、)が1回以上表示されるかどうかを確認する必要があります。もしそうなら、その両側に1つ以上の数字があるはずです。

1,000.00は

1,000,00 okです、OK

である000.00は、これらの条件が、私はコンマがしたい満たしている場合は000.00が

OKではない、

1 OKではありません削除されるので1,000.00は1000.00になります

私が試したことは:

var x = '1,000.00';

var regex = new RegExp( "[0-9] +、[0-9] +"、 "g");

var y = x.replace(regex、 "");

alert(y);

アラートを実行すると、「.00」が表示されます。これは、私が期待していたものではないものです。

ご協力いただきありがとうございます。

強いテキスト 編集 強いテキストこれまでに、すべての入力のための

おかげで、与えられた3つの解答。残念ながら、私は十分に私の質問を説明したとは思わない。私が達成しようとしています何

は次のとおりです。

テキストにカンマがあると、それはその後、カンマを除去するがあるとして、文字列の残りの部分を残して1つ以上の数字のいずれかの側がある場合。

テキストにカンマがあり、少なくとも1つの数字がない場合は、何もしません。

だから、上からの私の例を使用して:

1,000.00は1000.00

1,000,00は100000

となり000.00は、000.00

1、として残され、000.00を1として残されているとなっ,, 000.00

混乱の謝罪!

+0

文字列内のコンマ...たとえばString.replace( '、'、 ''); – James

+0

コメントありがとうジミー。それも私の最初の解決策でした!残念ながら、いくつかのフィールドではカンマを書式設定の一部として含めることができます。だから私は、ユーザーがフィールドを離れる前にカンマを入力する前に、少なくともどちらかの側に番号がなければなりません。基本的にあなたは、文字列を逆にして先読みを行うことにより、後読みをシミュレートすることができ –

答えて

4

あなたの正規表現は、1000よりも高いオーダーで非常に柔軟性がなくなり、コンマを持たない入力に問題があります。さらに問題になっているのは、興味のあるデータの部分をマッチングして置き換えることです!

問題のあるフォームにマッチして正規表現を削除して削除する方がよいでしょう。

以下は、入力の始め、入力の最後、数字の前に、または数字の後にカンマを(順番に)マッチさせます。余談として

var y = x.replace(/^,|,$|[^0-9]+,|,[^0-9]+/g,''); 

、このすべては、あなたがlookbehindを行うことができるように起こるが、ほぼすべてのJSの実装がない場合ははるかに簡単です。質問の更新に基づいて

編集:

[OK]を、私は彼らがそうであるように、あなたのルールがある理由を理解しようとしませんが、正規表現は、それを解決するために単純な取得します。

var y = x.replace(/(\d),(\d)/g, '$1$2'); 
+3

1 ,,,,,,,,,,,,,,,, 000などを入力するユーザー... – James

+0

確かに、良い点、しかし停止しますOPは先読みと後ろ向きの両方を行う必要があります。それが重要であればベンチマークすることができますが、複数の操作が上記の正規表現よりも頑丈であると思います。 – annakata

+0

こんにちはannakata、 ソリューションのおかげで - 第2のものは私が必要としていたものでした。 もう一度おねがいします! よろしくお願いいたします。 Ian –

2

I

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)$ 
  • [0-9] {1,3}:1〜3桁以下のようなものを使用しますS
  • ([0-9] {3})*:カンマで区切って[オプション]より桁トリプレット
  • (\ [0-9] +):[オプション] +ドット以上の数字

この正規表現が一致する場合は、あなたの番号が有効であることがわかります。その後はすべてのコンマを空の文字列に置き換えてください。

+0

あなたの番号の正しさを確認して、まず始めましょう。これが完了したら、すべてのカンマを削除する必要があります。 –

1

これらのいずれかの場合は、3つのエラー条件

  1. 」、1000" 年
  2. "1000、"
  3. "1、、000"

を持っているように思えますtrueの場合はフィールドを拒否する必要があります。すべてfalseの場合は、カンマを通常の方法で削除して移動できます。

^,|,,|,$ 
+0

非常にスマートなソリューション – dfa

1

私はちょうどparseFloat()を介して出力を数字と小数点区切り([^0-9.])以外のものを削除して送信します::これは単純な交代することができ、単にすべて削除すると間違って何

var y = parseFloat(x.replace(/[^0-9.]+/g, "")); 
1
// invalid cases: 
// - standalone comma at the beginning of the string 
// - comma next to another comma 
// - standalone comma at the end of the string 
var i, 
    inputs = ['1,000.00', '1,000,00', ',000.00', '1,,000.00'], 
    invalid_cases = /(^,)|(,,)|(,$)/; 
for (i = 0; i < inputs.length; i++) { 
    if (inputs[i].match(invalid_cases) === null) { 
     // wipe out everything but decimal and dot 
     inputs[i] = inputs[i].replace(/[^\d.]+/g, ''); 
    } 
} 
console.log(inputs); // ["1000.00", "100000", ",000.00", "1,,000.00"] 
関連する問題