क्या HTML पाठ इनपुट ( <input type=text />
) को केवल संख्यात्मक कीस्ट्रोक्स (प्लस '।') की अनुमति देने का एक त्वरित तरीका है ?
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
क्या HTML पाठ इनपुट ( <input type=text />
) को केवल संख्यात्मक कीस्ट्रोक्स (प्लस '।') की अनुमति देने का एक त्वरित तरीका है ?
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
जवाबों:
नोट: यह एक अद्यतन उत्तर है। नीचे दी गई टिप्पणियाँ पुराने संस्करण का उल्लेख करती हैं, जिसमें कीकोड के साथ गड़बड़ होती है।
JSFiddle पर इसे स्वयं आज़माएं ।
आप <input>
निम्न setInputFilter
फ़ंक्शन के साथ किसी पाठ के इनपुट मानों को फ़िल्टर कर सकते हैं (कॉपी + पेस्ट, ड्रैग + ड्रॉप, कीबोर्ड शॉर्टकट, संदर्भ मेनू संचालन, गैर-टाइप करने योग्य कुंजी, कैरेट स्थिति, विभिन्न कीबोर्ड लेआउट और IE 9 के बाद से सभी ब्राउज़रों का समर्थन करता है ) :
// Restricts input for the given textbox to the given inputFilter function.
function setInputFilter(textbox, inputFilter) {
["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) {
textbox.addEventListener(event, function() {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
this.value = "";
}
});
});
}
अब आप setInputFilter
इनपुट फ़िल्टर को स्थापित करने के लिए फ़ंक्शन का उपयोग कर सकते हैं :
setInputFilter(document.getElementById("myTextBox"), function(value) {
return /^\d*\.?\d*$/.test(value); // Allow digits and '.' only, using a RegExp
});
अधिक इनपुट फ़िल्टर उदाहरणों के लिए JSField डेमो देखें । यह भी ध्यान दें कि आपको अभी भी सर्वर साइड सत्यापन करना होगा!
यहाँ इसका एक टाइपस्क्रिप्ट संस्करण है।
function setInputFilter(textbox: Element, inputFilter: (value: string) => boolean): void {
["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) {
textbox.addEventListener(event, function(this: (HTMLInputElement | HTMLTextAreaElement) & {oldValue: string; oldSelectionStart: number | null, oldSelectionEnd: number | null}) {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (Object.prototype.hasOwnProperty.call(this, 'oldValue')) {
this.value = this.oldValue;
if (this.oldSelectionStart !== null &&
this.oldSelectionEnd !== null) {
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
}
} else {
this.value = "";
}
});
});
}
इसका एक jQuery संस्करण भी है। इस जवाब को देखें ।
HTML 5 में एक देशी समाधान है <input type="number">
( विनिर्देश देखें ), लेकिन ध्यान दें कि ब्राउज़र समर्थन भिन्न होता है:
step
, min
और max
विशेषताओं का समर्थन नहीं करते हैं ।e
और E
क्षेत्र में प्रवेश करने की अनुमति देता है । यह प्रश्न भी देखें ।W3schools.com पर इसे स्वयं आज़माएँ ।
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
इस DOM का उपयोग करें
<input type='text' onkeypress='validate(event)' />
और यह लिपि
function validate(evt) {
var theEvent = evt || window.event;
// Handle paste
if (theEvent.type === 'paste') {
key = event.clipboardData.getData('text/plain');
} else {
// Handle key press
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
}
var regex = /[0-9]|\./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
}
मैंने इसके अच्छे उत्तर के लिए लंबी और कठिन खोज की है, और हमें इसकी सख्त आवश्यकता है <input type="number"
, लेकिन इससे भी कम, ये 2 सबसे संक्षिप्त तरीके हैं जिनके साथ मैं आ सकता था:
<input type="text"
onkeyup="this.value=this.value.replace(/[^\d]/,'')">
यदि आप मिटाए जाने से पहले विभाजन के लिए दिखाए गए गैर-स्वीकृत चरित्र को नापसंद करते हैं, तो नीचे दी गई विधि मेरा समाधान है। कई अतिरिक्त स्थितियों पर ध्यान दें, यह सभी प्रकार के नेविगेशन और हॉटकी को अक्षम करने से बचने के लिए है। अगर किसी को पता है कि इसे कैसे छोटा करना है, तो हमें बताएं!
<input type="text"
onkeydown="return ( event.ctrlKey || event.altKey
|| (47<event.keyCode && event.keyCode<58 && event.shiftKey==false)
|| (95<event.keyCode && event.keyCode<106)
|| (event.keyCode==8) || (event.keyCode==9)
|| (event.keyCode>34 && event.keyCode<40)
|| (event.keyCode==46) )">
/[^\d+]/
और इसे नीचे रखने के साथ काम करता है
/[^\d]+/
बजाय होना चाहिए । अच्छा समाधान हालांकि। इसके अलावा @ user235859
.
भी अनुमति देना चाहता था । आपको वास्तव में इसे बनाना चाहिए/[^0-9.]/g
यहाँ एक सरल है जो ठीक एक दशमलव के लिए अनुमति देता है, लेकिन और नहीं:
<input type="text" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');" />
और एक और उदाहरण, जो मेरे लिए बहुत अच्छा काम करता है:
function validateNumber(event) {
var key = window.event ? event.keyCode : event.which;
if (event.keyCode === 8 || event.keyCode === 46) {
return true;
} else if ( key < 48 || key > 57 ) {
return false;
} else {
return true;
}
};
साथ ही कीपर ईवेंट से जुड़े
$(document).ready(function(){
$('[id^=edit]').keypress(validateNumber);
});
और HTML:
<input type="input" id="edit1" value="0" size="5" maxlength="5" />
एचटीएमएल 5 है <input type=number>
, जो आपके लिए सही लगता है। वर्तमान में, केवल ओपेरा ही इसे मूल रूप से समर्थन करता है, लेकिन एक परियोजना है जिसमें जावास्क्रिप्ट कार्यान्वयन है।
type=number
यह है कि IE9 द्वारा समर्थित नहीं है
type=number
को अनुमति दे रही है e
क्योंकि यह e+10
संख्या के रूप में विचार करता है। दूसरी समस्या यह है कि आप इनपुट में अधिकतम चार वर्णों को सीमित नहीं कर सकते।
यहां अधिकांश उत्तर कुंजी-घटनाओं का उपयोग करने की कमजोरी है ।
कई उत्तर कीबोर्ड मैक्रोज़, कॉपी + पेस्ट और अधिक अवांछित व्यवहार के साथ पाठ चयन करने की आपकी क्षमता को सीमित कर देंगे, दूसरों को विशिष्ट jQuery प्लगइन्स पर निर्भर करते हैं, जो मक्खियों को मशीनगनों से मार रहा है।
यह सरल समाधान इनपुट क्रॉस मैकेनिज्म (कीस्ट्रोक, कॉपी + पेस्ट, राइटक्लिक कॉपी + पेस्ट, स्पीच-टू-टेक्स्ट आदि) की परवाह किए बिना मेरे लिए सबसे अच्छा काम करता है। सभी टेक्स्ट चयन कीबोर्ड मैक्रोज़ अभी भी काम करेंगे, और यह स्क्रिप्ट द्वारा गैर-संख्यात्मक मान सेट करने की क्षमता को भी सीमित करेगा।
function forceNumeric(){
var $input = $(this);
$input.val($input.val().replace(/[^\d]+/g,''));
}
$('body').on('propertychange input', 'input[type="number"]', forceNumeric);
replace(/[^\d]+/g,'')
सभी गैर-अंकों को खाली स्ट्रिंग के साथ बदलें। "I" (असंवेदनशील) संशोधक की आवश्यकता नहीं है।
/[^\d,.]+/
मैंने यहाँ वर्णित दो उत्तरों के संयोजन का उपयोग करने का विकल्प चुना
<input type="number" />
तथा
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : evt.keyCode
return !(charCode > 31 && (charCode < 48 || charCode > 57));
}
<input type="text" onkeypress="return isNumberKey(event);">
return !(charCode > 31 && (charCode < 48 || charCode > 57));
HTML5 रीगेक्स का समर्थन करता है, इसलिए आप इसका उपयोग कर सकते हैं:
<input id="numbersOnly" pattern="[0-9.]+" type="text">
चेतावनी: कुछ ब्राउज़र अभी तक इसका समर्थन नहीं करते हैं।
<input type=number>
।
+
पैटर्न विशेषता में साधन क्या है ?
जावास्क्रिप्ट
function validateNumber(evt) {
var e = evt || window.event;
var key = e.keyCode || e.which;
if (!e.shiftKey && !e.altKey && !e.ctrlKey &&
// numbers
key >= 48 && key <= 57 ||
// Numeric keypad
key >= 96 && key <= 105 ||
// Backspace and Tab and Enter
key == 8 || key == 9 || key == 13 ||
// Home and End
key == 35 || key == 36 ||
// left and right arrows
key == 37 || key == 39 ||
// Del and Ins
key == 46 || key == 45) {
// input is VALID
}
else {
// input is INVALID
e.returnValue = false;
if (e.preventDefault) e.preventDefault();
}
}
अतिरिक्त आप अल्पविराम, अवधि और ऋण (, -) जोड़ सकते हैं
// comma, period and minus, . on keypad
key == 190 || key == 188 || key == 109 || key == 110 ||
एचटीएमएल
<input type="text" onkeydown="validateNumber(event);"/ >
बहुत आसन....
// एक जावास्क्रिप्ट फ़ंक्शन में (HTML या PHP का उपयोग कर सकते हैं)।
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
आपके फॉर्म इनपुट में:
<input type=text name=form_number size=20 maxlength=12 onkeypress='return isNumberKey(event)'>
इनपुट अधिकतम के साथ। (ये उपरोक्त 12 अंकों की संख्या के लिए अनुमति देता है)
var charCode = (evt.which) ? evt.which : evt.keyCode;
2 समाधान:
प्रपत्र सत्यापनकर्ता का उपयोग करें (उदाहरण के लिए jQuery सत्यापन प्लगइन के साथ )
Onblur के दौरान एक जांच करें (यानी जब उपयोगकर्ता फ़ील्ड छोड़ता है) इनपुट फ़ील्ड की घटना, नियमित अभिव्यक्ति के साथ:
<script type="text/javascript">
function testField(field) {
var regExpr = new RegExp("^\d*\.?\d*$");
if (!regExpr.test(field.value)) {
// Case of error
field.value = "";
}
}
</script>
<input type="text" ... onblur="testField(this);"/>
var regExpr = /^\d+(\.\d*)?$/;
.123
(इसके बजाय 0.123
) इनपुट करना चाहता है ?
var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;
:।
एक सुरक्षित दृष्टिकोण कीज को हाईजैक करने के बजाय इनपुट के मूल्य की जांच कर रहा है और कीकोड को फ़िल्टर करने की कोशिश कर रहा है।
इस तरह से उपयोगकर्ता कीबोर्ड तीर, संशोधक कुंजियों, बैकस्पेस, डिलीट, नॉन स्टैंडर्ड की-बोर्ड का उपयोग, माउस का उपयोग पेस्ट करने, ड्रैग और ड्रॉप टेक्स्ट का उपयोग करने, यहां तक कि एक्सेसिबिलिटी इनपुट का उपयोग करने के लिए स्वतंत्र है।
नीचे की स्क्रिप्ट सकारात्मक और नकारात्मक संख्याओं की अनुमति देती है
1
10
100.0
100.01
-1
-1.0
-10.00
1.0.0 //not allowed
var input = document.getElementById('number');
input.onkeyup = input.onchange = enforceFloat;
//enforce that only a float can be inputed
function enforceFloat() {
var valid = /^\-?\d+\.\d*$|^\-?[\d]*$/;
var number = /\-\d+\.\d*|\-[\d]*|[\d]+\.[\d]*|[\d]+/;
if (!valid.test(this.value)) {
var n = this.value.match(number);
this.value = n ? n[0] : '';
}
}
<input id="number" value="-3.1415" placeholder="Type a number" autofocus>
संपादित करें: मैंने अपना पुराना उत्तर हटा दिया क्योंकि मुझे लगता है कि यह अब प्राचीन है।
आप इसके लिए पैटर्न का उपयोग कर सकते हैं:
<input id="numbers" pattern="[0-9.]+" type="number">
यहां आप संपूर्ण मोबाइल वेबसाइट इंटरफ़ेस युक्तियां देख सकते हैं ।
कृपया नीचे दिए गए समाधान का पता लगाएं। इस उपयोगकर्ता केवल दर्ज करने में सक्षम हो सकता है numeric
मूल्य, इसके अलावा उपयोगकर्ता के लिए सक्षम नहीं हो सकता है copy
, paste
, drag
और drop
इनपुट में।
चरित्रों की अनुमति है
0,1,2,3,4,5,6,7,8,9
घटनाओं के माध्यम से वर्ण और वर्ण की अनुमति नहीं है
$(document).ready(function() {
$('#number').bind("cut copy paste drag drop", function(e) {
e.preventDefault();
});
});
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="form-control" name="number" id="number" onkeypress="return isNumberKey(event)" placeholder="Enter Numeric value only">
मुझे पता है अगर यह काम नहीं करता है।
एक और उदाहरण जहां आप इनपुट क्षेत्र में केवल संख्या जोड़ सकते हैं, अक्षर नहीं कर सकते
<input type="text" class="form-control" id="phone" name="phone" placeholder="PHONE" spellcheck="false" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');">
JQuery और प्रतिस्थापन () को देखने की बजाय एक छोटा और मीठा कार्यान्वयन।
$('input.numeric').live('keyup', function(e) {
$(this).val($(this).val().replace(/[^0-9]/g, ''));
});
केवल छोटे साइड इफेक्ट्स जो टाइप किए गए अक्षर पल-पल पर दिखाई देते हैं और CTRL / CMD + A थोड़ा अजीब व्यवहार करने लगता है।
input type="number"
एक HTML5 विशेषता है।
अन्य मामले में यह आपकी मदद करेगा:
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : evt.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
<input type="number" name="somecode" onkeypress="return isNumberKey(event)"/>
var charCode = (evt.which) ? evt.which : evt.keyCode;
जावास्क्रिप्ट कोड:
function validate(evt)
{
if(evt.keyCode!=8)
{
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
var regex = /[0-9]|\./;
if (!regex.test(key))
{
theEvent.returnValue = false;
if (theEvent.preventDefault)
theEvent.preventDefault();
}
}
}
HTML कोड:
<input type='text' name='price' value='0' onkeypress='validate(event)'/>
पूरी तरह से काम करता है क्योंकि बैकस्पेस कीकोड 8 है और एक रेगेक्स एक्सप्रेशन इसकी अनुमति नहीं देता है, इसलिए यह बग को बायपास करने का एक आसान तरीका है :)
इस समस्या को हल करने का एक आसान तरीका उदाहरण के लिए पाठ में टाइप किए गए चार्टेटर्स को regex के साथ मान्य करने के लिए एक jQuery फ़ंक्शन को लागू करना है:
आपका html कोड:
<input class="integerInput" type="text">
और js jQuery का उपयोग करके कार्य करता है
$(function() {
$('.integerInput').on('input', function() {
this.value = this.value
.replace(/[^\d]/g, '');// numbers and decimals only
});
});
$(function() {
$('.integerInput').on('input', function() {
this.value = this.value
.replace(/[^\d]/g, '');// numbers and decimals only
});
});
<script
src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
crossorigin="anonymous">
</script>
<input type="text" class="integerInput"/>
अभी अधिकांश ब्राउज़रों में सहायक इस प्रकार = "संख्या" का उपयोग करें
<input type="number" maxlength="3" ng-bind="first">
--1
(1 से पहले 2 शून्य वर्ण)।
आप इनपुट मान की तुलना भी कर सकते हैं (जिसे डिफ़ॉल्ट रूप से स्ट्रिंग के रूप में माना जाता है) खुद को संख्यात्मक के रूप में मजबूर करने के लिए, जैसे:
if(event.target.value == event.target.value * 1) {
// returns true if input value is numeric string
}
हालाँकि, आप की जरूरत है कि कीप आदि की तरह।
मैंने कुछ शानदार जवाब देखे लेकिन मैं उन्हें जितना छोटा और जितना संभव हो उतना सरल लगता हूं, इसलिए शायद किसी को इससे फायदा होगा। मैं इस तरह जावास्क्रिप्ट Number()
और isNaN
कार्यक्षमता का उपयोग करेगा :
if(isNaN(Number(str))) {
// ... Exception it is NOT a number
} else {
// ... Do something you have a number
}
उम्मीद है की यह मदद करेगा।
इस DOM का उपयोग करें:
<input type = "text" onkeydown = "validate(event)"/>
और यह स्क्रिप्ट:
validate = function(evt)
{
if ([8, 46, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 35, 36].indexOf(evt.keyCode || evt.which) == -1)
{
evt.returnValue = false;
if(evt.preventDefault){evt.preventDefault();}
}
}
... या इस लिपि को, बिना indexOf के, दो के उपयोग से for
...
validate = function(evt)
{
var CharValidate = new Array("08", "046", "039", "948", "235");
var number_pressed = false;
for (i = 0; i < 5; i++)
{
for (Ncount = 0; Ncount < parseInt(CharValidate[i].substring(0, 1)) + 1; Ncount++)
{
if ((evt.keyCode || evt.which) == parseInt(CharValidate[i].substring(1, CharValidate[i].lenght)) + Ncount)
{
number_pressed = true;
}
}
}
if (number_pressed == false)
{
evt.returnValue = false;
if(evt.preventDefault){evt.preventDefault();}
}
}
मैंने onkeypress के बजाय onkeydown विशेषता का उपयोग किया है, क्योंकि onkeypress विशेषता से पहले onkeydown विशेषता की जांच की जाती है। समस्या Google Chrome ब्राउज़र में होगी।
"Onkeypress" की विशेषता के साथ, TAB Google क्रोम पर "preventDefault" के साथ बेकाबू होगा, हालांकि, "onkeydown" की विशेषता के साथ, TAB नियंत्रणीय हो जाता है!
TAB => 9 के लिए ASCII कोड
पहली स्क्रिप्ट में दूसरे की तुलना में कम कोड है, हालांकि, ASCII वर्णों की सरणी में सभी कुंजी होनी चाहिए।
दूसरी स्क्रिप्ट पहले की तुलना में बहुत बड़ी है, लेकिन सरणी को सभी कुंजियों की आवश्यकता नहीं है। सरणी की प्रत्येक स्थिति में पहला अंक प्रत्येक स्थिति को पढ़ा जाएगा की संख्या है। प्रत्येक पढ़ने के लिए, अगले एक के लिए 1 वेतन वृद्धि होगी। उदाहरण के लिए:
NCount = 0
48 + NCount = 48
NCount + +
48 + NCount = 49
NCount + +
...
48 + NCount = 57
संख्यात्मक कुंजियों के मामले में केवल 10 (0 - 9) हैं, लेकिन यदि वे 1 मिलियन थे, तो इन सभी कुंजियों के साथ एक सरणी बनाने का कोई मतलब नहीं होगा।
ASCII कोड:
यह एक बेहतर कार्य है:
function validateNumber(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
if ((key < 48 || key > 57) && !(key == 8 || key == 9 || key == 13 || key == 37 || key == 39 || key == 46) ){
theEvent.returnValue = false;
if (theEvent.preventDefault) theEvent.preventDefault();
}
}
सबसे अच्छा तरीका है (सभी प्रकार की संख्याओं की अनुमति दें - वास्तविक नकारात्मक, वास्तविक सकारात्मक, आईनेगर नकारात्मक, पूर्णांक सकारात्मक):
$(input).keypress(function (evt){
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[-\d\.]/; // dowolna liczba (+- ,.) :)
var objRegex = /^-?\d*[\.]?\d*$/;
var val = $(evt.target).val();
if(!regex.test(key) || !objRegex.test(val+key) ||
!theEvent.keyCode == 46 || !theEvent.keyCode == 8) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
};
});
यह जियोवा 4 के समाधान का विस्तारित संस्करण है । समर्थन करता है min
और max
विशेषताएँ। यदि संख्या सीमा से बाहर है, तो पिछला मान दिखाया जाएगा।
आप इसे यहाँ परीक्षण कर सकते हैं।
उपयोग: <input type=text class='number' maxlength=3 min=1 max=500>
function number(e) {
var theEvent = e || window.event;
var key = theEvent.keyCode || theEvent.which;
if(key!=13&&key!=9){//allow enter and tab
key = String.fromCharCode( key );
var regex = /[0-9]|\./;
if( !regex.test(key)) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
}
}
$(document).ready(function(){
$("input[type=text]").filter(".number,.NUMBER").on({
"focus":function(e){
$(e.target).data('oldValue',$(e.target).val());
},
"keypress":function(e){
e.target.oldvalue = e.target.value;
number(e);
},
"change":function(e){
var t = e.target;
var min = $(t).attr("min");
var max = $(t).attr("max");
var val = parseInt($(t).val(),10);
if( val<min || max<val)
{
alert("Error!");
$(t).val($(t).data('oldValue'));
}
}
});
});
यदि इनपुट गतिशील हैं तो इसका उपयोग करें:
$(document).ready(function(){
$("body").on("focus","input[type=text].number,.NUMBER",function(e){
$(e.target).data('oldValue',$(e.target).val());
});
$("body").on("keypress","input[type=text].number,.NUMBER",function(e){
e.target.oldvalue = e.target.value;
number(e);
});
$("body").on("change","input[type=text].number,.NUMBER",function(e){
var t = e.target
var min = $(t).attr("min");
var max = $(t).attr("max");
var val = parseInt($(t).val());
if( val<min || max<val)
{
alert("Error!");
$(t).val($(t).data('oldValue'));
}
});
});