2011-11-15 7 views
1

フォームフィールドでドル金額の書式を設定するために頻繁に使用するJavaScriptの既存の行を変更しようとしています(入力しなくてもセントが表示されます)。JavaScriptから数値以外の部分または小数部分を削除する

<input maxlength="7" name="dollarvalue" size="8" onChange="javascript:this.value=parseFloat(this.value).toFixed(2);" /> 

を...しかし、何かが数字または小数以外の入力された場合、それは壊れる...ので、私はおそらく禁止文字をフィルタリングするstr.replace()を追加すると考えていた:私は長年のためにこれを使用しています。必要に応じてフォームフィールドにこの1行を簡単に追加できるように、完全に自己完結型である必要があります(onChange)。私はこれまでのところ、数字のためにはまだ動作しますが、他のものを取り除いているわけではありません。私は間違って何をしていますか?

<input maxlength="7" name="dollarvalue" size="8" onChange="javascript:this.value=parseFloat(this.value.replace('/[^0-9\.]+/g','')).toFixed(2);" /> 
+0

地球上であなたはなぜ:あなたは、あなたの正規表現を引用してはならないので、全体の二行目があるべき – nnnnnn

+0

なぜダウン投票?私はこれをページあたり最大1回しか使用しません。他の依存関係を必要とせずに簡単にプロジェクトに貼り付けることができます。私はそれを悪用しているわけではありません。私は、すぐに着信価値をフォーマットしたいという機会に使うためには、非常にポータブルなものが必要です。 – techtheatre

+0

私はdownvoteしませんでした(私は決してdownvotedしていない、とにかく私はあなたの投稿はdownvoteに値するとは思わない)。人々はしばしば正当な理由なくダウンボートしています。数時間前に誰かが説明を残さずに私の古い質問と答えをしました。何人かの人々は_建設的な批判の概念を理解していないだけです... – nnnnnn

答えて

8

正規表現の前後に引用符を使用しないでください。

<input maxlength="7" name="dollarvalue" size="8" onChange="javascript:this.value=parseFloat(this.value.replace(/[^0-9\.]+/g,'')).toFixed(2);" /> 
2

this.value.replace(/[^0-9\.]+/g,'') 

this.value.replace('/[^0-9\.]+/g','') 

を変更する必要がありますこれをインラインでやっている?どこにでも同じコードを複製する必要がありますか?どのフォームフィールドにも追加できるようにしたいと思っていますが、確かにそれをライブラリ関数にすることはできますか?あなたの正規表現は現在、複数の小数点を許しています。ブラウザがすでにどのイベントハンドラでもJavaScriptを期待しているので、 `javascript:`と言う必要はありません。その接頭辞は、アンカータグの `href`属性で使用する場合にのみ必要です(そして意味をなさない)。本当にやってはいけませんが、別の日の議論です。

関連する問題