2016-11-02 5 views
-2

私は、ユーザーが入力した$記号を自動的に削除したいという金額項目を持っています。たとえば、$ 50を置くとしたら - 50に自動的に変更したいと思います。彼らが$ 12.50に入れば、それは自動的に12.50に変更されます。

私は次のスクリプトがあります。

$('#searchAmt').on('keyup',function(){ 
var oldtxt = $(this).val(); 
var findtxt = '^[$]'; 
var newtxt = oldtxt.replace(new RegExp(findtxt, 'g'), ''); 
$(this).val(newtxt); 
}); 

これは、ドル記号を削除するに動作しますが、それはまた、ユーザが置く任意の小数点以下を削除しているので、上記の例を使用して、それが50に$ 50を変更します$ 12.50から1250に変更されます。

これを使用している入力フィールドには、入力タイプnumberがあります。 Safari & Chromeでは、これによりユーザーは$ - を使用することができなくなりますが、FirefoxとIEでは、ユーザーは引き続き$を入れることができます。

+0

ドットを削除し、コードのいくつかの他の部分があるようです。 '^ [$]'は、文字列の先頭にある '$'シンボルにのみマッチします。 –

+0

'£'を入れるとどうなりますか?数字を探してそれを保つ方が良いのではないでしょうか。 – vlaz

+0

関連コードを追加して明確にしてください。さもなければ、人々は無関係の回答を掲示するでしょう。 'keydown'機能コードを確認してください。 –

答えて

2

.replaceも正規表現の代わりに文字列を引数として受け入れます。これを試してください:

var oldtxt = $(this).val(); 
var newtxt = oldtxt.replace("$", ""); 

$が削除されます。これは、複数の期間と数を考慮していない

var newtxt = oldtxt.replace(/[^0-9.]/g, ""); 

また、あなたはこれで数や小数ではありませんすべてを削除することができます。それらを取り除くには、これを試してください。これは、期間の最後の出現だけを残します:

var newtxt = oldtxt.replace(/[^0-9.]|\.(?=.*\.)/g, ""); 

私はRegExが好きです。

+0

これは最も簡単な解決策のようですが、より多くのテストを行った結果、$(this).val(newtxt)で10進数の問題が発生したように見えます。私は、$が入力されるのを防ぐ方法を再考する必要があるかもしれないと思っています。 – rmlumley

+1

@rmlumleyは ''を使用しますか? – vlaz

+0

@vlazです。 SafariとChromeで完全に動作します。問題はFirefox&IEで、まだ$で入力できるようになります。 – rmlumley

0

あなたは、単にこれを使用することができます:それは、文字列の先頭で発生した場合に

0
var regex = new RegExp('^[$]') 

console.log('$50\n$60'.replace(/[$]/g, ''));
または

var regex = new Regex('^\\\$') 

はこれが唯一の$記号を削除します。

クロームコンソールからの出力

var regex = new RegExp('^[$]') 

var oldtxt = "$12.50" 

newtxt = oldtxt.replace(regex, '') 

"12.50" 
+0

ドル記号はエスケープする必要があります。いいえ、ドル記号は角括弧の中で特別な意味を失います。それはエスケープする必要があります_or_は '[]'の中にある必要があり、両方が必要ではなく、単に正規表現を乱雑にする役目を果たします。 – vlaz

+0

また、実際にはエスケープしませんでした。文字列であるため、エスケープ文字をエスケープする必要があります。これは文字列 '$ 'を含む文字列を生成するためです。最初に文字列を入力します)。 – vlaz

+0

あなたは正しいですか?答えを変えた –

関連する問題