2

私が作成した HTML フォームには、金額を入力する必要があるフィールドがあります。

私が読んだことによると、JavaScript は 10 進数を数値要素として認識せず、受け入れられている方法は、ドルの金額を処理するのではなく、セントで入力することです。

問題は、私が書いているフォームが、フォーム入力を読み取り、いくつかのアクションを実行する関数に送信され、この金額を ##.## 形式のテキストとして受け取り、この正確な形式ではない入力を拒否することです。

私が疑問に思っているのは、5 文字を取り、3 番目の文字を永続的な小数点として設定するテキスト ボックスを作成することは可能ですか?

そうでない場合、JS 検証を使用して入力が適切な形式であることを確認する方法はありますか?

ありがとう!

4

2 に答える 2

0

HTML では、特定の文字が固定されたテキスト ボックスを作成することはできません。ユーザーが 1234 と入力してピリオドを自動的に挿入するよりも、(金額を指定する場合) 12.34 と入力する方が自然であるため、その必要性もほとんどありません。

patternHTML5属性を使用して、必要な形式を指定できます。まだすべてのブラウザーでサポートされているわけではありませんが、サポートされていなくても害はなく、JavaScript が無効になっている場合でもチェックを実行します。もちろん、JavaScript チェックを追加する必要があります。このような単純なケースでは、ライブラリを使用する代わりにコードを直接記述した方がよい場合があります。

<input pattern="\d?\d\.\d\d" maxlength=5 size=5 onchange="check(this)">
<script>
function check(elem) {
  if(!elem.value.match(/^\d?\d\.\d\d$/)) {
    alert('Error in data – use the format dd.dd (d = digit)');
  }
}
</script>

使用される正規表現は、dd.dd と d.dd の両方を受け入れます (?最初の形式のみを許可するには、を省略します)。

この例ではalert、簡単にするために を使用しています。実際のページでは、ユーザーにエラーを通知するための混乱の少ない方法を使用する必要があります (通常、そのようなメッセージ用に予約された領域にテキストを書き込む)。ただし、それを行う最善の方法は、ページ全体の設計によって異なります。 .

( を使用する方が論理的に思えるかもしれません<input type=number min=0 max=99.99 step=0.01 ...>が、これは深刻なローカリゼーションの問題を引き起こす可能性があり、ブラウザーの実装type=numberは仮にあったとしても不十分です。最も重要なのは、送信されたデータが必要な形式に準拠するという保証がないことです。たとえば、Chrome では、ブラウザによって作成されたコントロールの場合、数値は 0.09 から 0.10 ではなく 0.1 に、0.99 から 1.00 ではなく 1 に段階的に変化します。)

于 2013-07-27T05:27:52.150 に答える