特定の<input>
フィールドが数値としてのみ値をとることを確認する必要があります。入力はフォームの一部ではありません。したがって、送信されないため、送信中に検証することはできません。ユーザーが数字以外の文字を入力できないようにしたい。
これを達成するためのきちんとした方法はありますか?
特定の<input>
フィールドが数値としてのみ値をとることを確認する必要があります。入力はフォームの一部ではありません。したがって、送信されないため、送信中に検証することはできません。ユーザーが数字以外の文字を入力できないようにしたい。
これを達成するためのきちんとした方法はありますか?
回答:
あなたは使用することができますHTML5の入力タイプ番号を数字のみのエントリを制限します:
<input type="number" name="someid" />
これは、HTML5クレームブラウザーでのみ機能します。HTMLドキュメントのdoctypeが次のとおりであることを確認してください。
<!DOCTYPE html>
古いブラウザでの透過的なサポートについては、https://github.com/jonstipe/number-polyfillも参照してください。
更新:このための新しい非常にシンプルなソリューションがあります。
さまざまな数値フィルターを含め、テキストで任意の種類の入力フィルターを使用できます
<input>
。これにより、コピー+貼り付け、ドラッグ+ドロップ、キーボードショートカット、コンテキストメニューの操作、入力できないキー、およびすべてのキーボードレイアウトが正しく処理されます。
この回答を参照するか、JSFiddleで自分で試してください。
一般的な目的で、以下のようにJS検証を行うことができます。
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : evt.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
<input name="someid" type="number" onkeypress="return isNumberKey(event)"/>
小数を許可する場合は、「if条件」を次のように置き換えます。
if (charCode > 31 && (charCode != 46 &&(charCode < 48 || charCode > 57)))
JSFiddleデモ:http ://jsfiddle.net/viralpatel/nSjy7/
var charCode = (evt.which) ? evt.which : evt.keyCode;
html5でpattern属性を使用することもできます。
<input type="text" name="name" pattern="[0-9]" title="Title" />
ただし、Doctypeがそうでないhtml
場合は、javascript / jqueryを使用する必要があると思います。
すばやく簡単なコード
<input type="text" onkeypress="return (event.charCode !=8 && event.charCode ==0 || (event.charCode >= 48 && event.charCode <= 57))" />
これにより、数字とバックスペースの使用のみが許可されます。
小数部も必要な場合は、次のコードを使用してください
<input type="text" onkeypress="return (event.charCode !=8 && event.charCode ==0 || ( event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)))" />
を使用できます<input type="number" />
。これにより、入力ボックスに入力できるのは数字のみになります。
例:http : //jsfiddle.net/SPqY3/
input type="number"
タグは新しいブラウザでのみサポートされていることに注意してください。
Firefoxの場合、JavaScriptを使用して入力を検証できます。
2018-03-12の更新:ブラウザーのサポートが大幅に改善され、次のサポートが追加されました。
<input type="text" name="myinput" id="myinput" onkeypress="return isNumber(event);" />
そしてjsで:
function isNumber(e){
e = e || window.event;
var charCode = e.which ? e.which : e.keyCode;
return /\d/.test(String.fromCharCode(charCode));
}
または、複雑なbu便利な方法でそれを書くことができます:
<input onkeypress="return /\d/.test(String.fromCharCode(((event||window.event).which||(event||window.event).which)));" type="text" name="myinput" id="myinput" />
注:リテラルのクロスブラウザと正規表現。
0.43
または.43
)を考慮する必要があります。これは1行のコードでは醜いので、関数を使用することをお勧めします。整数または浮動小数点をテストするには、ここを確認してください。
正規表現を使用して、入力値を必要なパターンに置き換えました。
var userName = document.querySelector('#numberField');
userName.addEventListener('input', restrictNumber);
function restrictNumber (e) {
var newValue = this.value.replace(new RegExp(/[^\d]/,'ig'), "");
this.value = newValue;
}
<input type="text" id="numberField">
<input
onkeyup="value=isNaN(parseFloat(value))?1000:value"
type="number"
value="1000"
>
onkeyup
キーが離されるとトリガーされます。
isNaN(parseFloat(value))?
入力値が数値でないかどうかを確認します。
数値でない場合、値は1000に:
設定されます。数値である場合、値は値に設定されます。
注:なんらかの理由で、type="number"
さらに存在感を高めるために、境界を持つこともできます。
<input
onkeyup="value=isNaN(parseFloat(value))||value<0||value>9000?1000:value"
type="number"
value="1000"
>
楽しい!
私はこれと少し戦った。ここや他の多くのソリューションは複雑に見えました。このソリューションでは、HTMLとともにjQuery / javascriptを使用します。
<input type="number" min="1" class="validateNumber">
$(document).on('change', '.validateNumber', function() {
var abc = parseInt($(this).val());
if(isNaN(abc)) { abc = 1; }
$(this).val(abc);
});
私の場合、最小値1で少量を追跡していたため、入力タグではmin = "1"、isNaN()チェックではabc = 1でした。正の数のみの場合、これらの値を0に変更し、負の数を許可するために入力タグから単にmin = "1"を削除することもできます。
また、これは複数のボックスで機能し(IDごとに個別に実行するよりもロード時間を節約できます)、必要な場所に「validateNumber」クラスを追加するだけです。
説明
parseInt()は、整数値ではなくNaNを返すことを除いて、基本的に必要なことを行います。単純なif()を使用すると、NaNが返されるすべてのケースで優先する「フォールバック」値を設定できます:-)。また、W3はここで、NaNのグローバルバージョンがチェックの前に型キャストを行い、追加の証明を提供すると述べています(Number.isNaN()はそれを行いません)。サーバー/バックエンドに送信された値は、そこでも検証される必要があります!
function AllowOnlyNumbers(e) {
e = (e) ? e : window.event;
var clipboardData = e.clipboardData ? e.clipboardData : window.clipboardData;
var key = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
var str = (e.type && e.type == "paste") ? clipboardData.getData('Text') : String.fromCharCode(key);
return (/^\d+$/.test(str));
}
<h1>Integer Textbox</h1>
<input type="text" autocomplete="off" id="txtIdNum" onkeypress="return AllowOnlyNumbers(event);" />
JSFiddle:https ://jsfiddle.net/ug8pvysc/
HTML5を使用できる場合は、実行できます。実行できない<input type="number" />
場合は、コードビハインドから実行するように送信されないように、JavaScriptを使用して実行する必要があります。
<input id="numbersOnly" onkeypress='validate()' />
function validate(){
var returnString;
var text = document.getElementByID('numbersOnly').value;
var regex = /[0-9]|\./;
var anArray = text.split('');
for(var i=0; i<anArray.length; i++){
if(!regex.test(anArray[i]))
{
anArray[i] = '';
}
}
for(var i=0; i<anArray.length; i++) {
returnString += anArray[i];
}
document.getElementByID('numbersOnly').value = returnString;
}
PSはコードをテストしませんでしたが、タイプミスをチェックしない場合は多少正しいはずです。
使用してみ<input type="number"...>
ませんか?
http://www.w3schools.com/tags/tag_input.asp
また、Javascriptを使用して検証する例がいくつかある質問もここにあります。
更新:より良い質問にリンク(thanks alexblum)。
受け入れられた答え:
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
それは良いですが完璧ではありません。私にとってはうまくいきますが、ifステートメントを簡略化できるという警告が表示されます。
その後、次のように表示されます。
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode;
return !(charCode > 31 && (charCode < 48 || charCode > 57));
}
元の投稿にコメントしますが、評判が低すぎてコメントできません(このアカウントを作成したばかりです)。
<input>
タグは属性type = 'number'で使用できます。
例えばあなたは使うことができます <input type='number' />
この入力フィールドに入力できるのは数値のみです。このフィールドで受け入れられる最小値と最大値を指定することもできます。
JavaScript言語を使用して、Webページ上のテキスト入力要素の値のクロスブラウザーフィルターの私のプロジェクトを参照してください:入力キーフィルター。値を整数、浮動小数点数としてフィルタリングしたり、電話番号フィルターなどのカスタムフィルターを作成したりできます。整数を入力するコードの例を参照してください。
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Input Key Filter Test</title>
<meta name="author" content="Andrej Hristoliubov anhr@mail.ru">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<!-- For compatibility of IE browser with audio element in the beep() function.
https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
</head>
<body>
<h1>Integer field</h1>
<input id="Integer">
<script>
CreateIntFilter("Integer", function(event){//onChange event
inputKeyFilter.RemoveMyTooltip();
var elementNewInteger = document.getElementById("NewInteger");
var integer = parseInt(this.value);
if(inputKeyFilter.isNaN(integer, this)){
elementNewInteger.innerHTML = "";
return;
}
//elementNewInteger.innerText = integer;//Uncompatible with FireFox
elementNewInteger.innerHTML = integer;
}
//onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid)
, function(event){ inputKeyFilter.isNaN(parseInt(this.value), this); }
);
</script>
New integer: <span id="NewInteger"></span>
</body>
</html>
入力キーフィルターの例の私のページ「整数フィールド:」も参照してください。
一般的な目的で、以下のようにJS検証を行うことができます。
数字キーパッドと通常の数字キーで機能します
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode < 31 || (charCode >= 48 && charCode <= 57 ) || (charCode >= 96 && charCode <= 105 ))
return true;
return false;
}
<input name="someid" type="number" onkeypress="return isNumberKey(event)"/>
入力タグ内に追加します:onkeyup = "value = value.replace(/ [^ \ d] / g、 '')"
以下を追加するために投稿されたいくつかの回答を更新しました:
小数点以下の許容数を指定します。
String.prototype.isDecimal = function isDecimal(evt,decimalPts) {
debugger;
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode != 46 && (charCode < 48 || charCode > 57)))
return false;
//Prevent more than one point
if (charCode == 46 && this.includes("."))
return false;
// Restrict the needed decimal digits
if (this.includes("."))
{
var number = [];
number = this.split(".");
if (number[1].length == decimalPts)
return false;
}
return true;
};
私はこれを郵便番号に使用します。すばやく簡単です。
<input type="text" id="zip_code" name="zip_code" onkeypress="return event.charCode > 47 && event.charCode < 58;" pattern="[0-9]{5}" required></input>
このコードを使用する場合、Mozilla Firefoxでは「BackSpace Button」を使用できません。Chrome47でのみバックスペースを使用できます&& event.charCode <58; "pattern =" [0-9] {5} "required>
http://www.texotela.co.uk/code/jquery/numeric/ これと、もちろんTexoTelaについて言及したLeoVũへの数値入力クレジット。テストページ付き。
複数の桁(1桁だけではない)を受け入れるには、REGEX条件に「+」を追加することをお勧めします。
<input type="text" name="your_field" pattern="[0-9]+">