HTML では、特定の文字が固定されたテキスト ボックスを作成することはできません。ユーザーが 1234 と入力してピリオドを自動的に挿入するよりも、(金額を指定する場合) 12.34 と入力する方が自然であるため、その必要性もほとんどありません。
pattern
HTML5属性を使用して、必要な形式を指定できます。まだすべてのブラウザーでサポートされているわけではありませんが、サポートされていなくても害はなく、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 に段階的に変化します。)