簡単なウェブアプリを作っています。その一部に、type = "number"の入力ボックスを含めました
<input type="number" min="0">
とにかく、最新のGoogle Chromeブラウザでコードを実行すると、テキストも入力できます。
私はユーザーにそれができるようにしたくありません。これをどのように修正する必要がありますか?
JavaScriptを使用して(jQueryなどで)特定の文字のみを許可できます:
// Catch all events related to changes
$('#textbox').on('change keyup', function() {
// Remove invalid characters
var sanitized = $(this).val().replace(/[^0-9]/g, '');
// Update value
$(this).val(sanitized);
});
ここ はフィドルです。
フロートのサポートと同じこと:
// Catch all events related to changes
$('#textbox').on('change keyup', function() {
// Remove invalid characters
var sanitized = $(this).val().replace(/[^0-9.]/g, '');
// Remove the first point if there is more than one
sanitized = sanitized.replace(/\.(?=.*\.)/, '');
// Update value
$(this).val(sanitized);
});
そして ここ は別のフィドルです。
更新:これは必要ないかもしれませんが、これは先頭のマイナス記号を許可するソリューションです。
// Catch all events related to changes
$('#textbox').on('change keyup', function() {
// Remove invalid characters
var sanitized = $(this).val().replace(/[^-0-9]/g, '');
// Remove non-leading minus signs
sanitized = sanitized.replace(/(.)-+/g, '$1');
// Update value
$(this).val(sanitized);
});
そして今、有効な小数(浮動小数点数と負の数を含む)のみを許可する最終的な解決策:
// Catch all events related to changes
$('#textbox').on('change keyup', function() {
// Remove invalid characters
var sanitized = $(this).val().replace(/[^-.0-9]/g, '');
// Remove non-leading minus signs
sanitized = sanitized.replace(/(.)-+/g, '$1');
// Remove the first point if there is more than one
sanitized = sanitized.replace(/\.(?=.*\.)/g, '');
// Update value
$(this).val(sanitized);
});
HTML5入力タイプnumber を使用して、数値エントリのみを制限できます。
<input type="number" name="someid" />
これは、HTML5苦情ブラウザでのみ機能します。 HTMLドキュメントのDoctypeが次のとおりであることを確認してください。
<!DOCTYPE html>
汎用の場合、次のようにJS検証を行うことができます。
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
<input type="someid" name="number" onkeypress="return isNumberKey(event)"/>
小数を許可する場合は、「if条件」を次のように置き換えます。
if (charCode > 31 && (charCode != 46 &&(charCode < 48 || charCode > 57)))