HTML පෙළ ආදානය සංඛ්‍යාත්මක ආදානයට පමණක් ඉඩ දෙයි


878

<input type=text />සංඛ්‍යාත්මක යතුරු එබීම් (ප්ලස් '.') සඳහා පමණක් ඉඩ දීම සඳහා HTML පෙළ ආදානය ( ) සැකසීමට ඉක්මන් ක්‍රමයක් තිබේද?


83
මෙහි බොහෝ විසඳුම් ක්‍රියාත්මක වන්නේ යතුරු එබූ විට පමණි. මිනිසුන් මෙනුව භාවිතයෙන් පෙළ අලවන්නේ නම් හෝ පෙළ ආදානයට පෙළ ඇදගෙන ගියහොත් මේවා අසාර්ථක වේ. මම මීට පෙර දෂ්ට කර ඇත. පරෙස්සම් වෙන්න!
බෙනට් මැක්ල්වී

85
Ul ජූලියස්ඒ - ඔබට සෑම විටම කෙසේ හෝ සේවාදායක පාර්ශවීය වලංගුතාවයක් අවශ්‍ය වේ.
ස්ටීවන් පී

51
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
ඩ්‍රෝගන්ස්

14
ආදාන අවධානය යොමු වී ඇත්නම් වෙබ් අඩවිය නැවුම් කිරීම සඳහා TAB වැනි වෙනත් යතුරක් අක්‍රීය කරන ඩ්‍රොගන්ස් දැනුම්දීම හෝ cmd + R වැනි ආදානය සමඟ කෙලින්ම සම්බන්ධ නොවන වෙනත් කෙටිමඟක්.
ඇලෙජැන්ඩ්‍රෝ පෙරෙස්

1
ඔබ ප්ලගිනය සමඟ හොඳින් නම්, NumericInput භාවිතා කරන්න. නිරූපණය : jsfiddle.net/152sumxu/2 වැඩි විස්තර මෙතැනින් stackoverflow.com/a/27561763/82961
Faiz

Answers:


1159

සටහන: මෙය යාවත්කාලීන කළ පිළිතුරකි. පහත දැක්වෙන අදහස් යතුරු කේත සමඟ අවුල් වූ පැරණි අනුවාදයක් වෙත යොමු වේ.

ජාවාස්ක්‍රිප්ට්

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
});

වැඩි ආදාන පෙරහන් උදාහරණ සඳහා JSFiddle නිරූපණය බලන්න . ඔබ තවමත් සේවාදායක පාර්ශව වලංගු කිරීම කළ යුතු බව සලකන්න !

යතුරු ලියනය

මෙන්න මෙහි TypeScript අනුවාදය.

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

මෙහි jQuery අනුවාදයක් ද ඇත. මෙම පිළිතුර බලන්න .

HTML 5

HTML 5 සමඟ ස්වදේශීය විසඳුමක් ඇත <input type="number">( පිරිවිතර බලන්න ), නමුත් බ්‍රව්සර් සහාය වෙනස් වන බව සලකන්න:

  • බොහෝ බ්‍රව්සර් වලංගු වන්නේ ආකෘති පත්‍රය ඉදිරිපත් කිරීමේදී මිස ටයිප් කිරීමේදී නොවේ.
  • බොහෝ ජංගම බ්‍රව්සර්step , minසහ maxගුණාංග සඳහා සහය නොදක්වයි .
  • ක්‍රෝම් (අනුවාදය 71.0.3578.98) තවමත් පරිශීලකයාට අක්ෂර ඇතුළු කිරීමට eසහ Eක්ෂේත්‍රයට ඇතුළු වීමට ඉඩ දෙයි . මෙම ප්‍රශ්නය ද බලන්න .
  • ෆයර්ෆොක්ස් (64.0 අනුවාදය) සහ එජ් (එඩ්ජ්එච්ටීඑම්එල් 17.17134) තවමත් පරිශීලකයාට ඕනෑම පෙළක් ක්ෂේත්‍රයට ඇතුළු කිරීමට ඉඩ දෙයි .

එය ඔබම උත්සාහ w3schools.com මත .


4
මෙය හොඳ තේරීමක් වුවද, මෙය තවමත් /, බහු තිත්, වෙනත් ක්‍රියාකරුවන් වැනි අක්ෂර ඇතුළත් කිරීමට ඉඩ දෙයි
මහේන්ද්‍ර ලියා

6
තවමත් ෆයර්ෆොක්ස් 21 සහාය නොදක්වයි (මම IE9 හෝ ඊට පෙර අනුවාදය ගැන කතා
නොකරමි

71
ආදාන වර්ග අංකය ඔබගේ ආදානය අංක පමණක් පිළිගැනීමට භාවිතා කිරීමට අදහස් නොකෙරේ. එය අදහස් කරන්නේ 'අයිතම ගණනක්' සඳහන් කරන යෙදවුම් සඳහා ය. ක්‍රෝම් උදාහරණයක් ලෙස කුඩා ඊතල දෙකක් එකතු කර සංඛ්‍යාව එකකින් අඩු කරයි. නිසි සංඛ්‍යාත්මක-පමණක් ආදානය යනු HTML වලට හාස්‍යජනක මඟ හැරීමකි.
අර්වින්

10
= "අංකය" වර්ගය ඇත්ත වශයෙන්ම අවලංගු පෙළ ක්ෂේත්‍රයට ඇතුළු වීම වළක්වන්නේ නැත; ඔබට ක්‍රෝම් තුළ පවා කසළ දත්ත ක්ෂේත්‍රයට කපා ඇලවිය හැකි බව පෙනේ.
පරිපූර්ණතා

6
මම මේ සඳහා එකතු කරන එකම දෙය වන්නේ MacOSX භාවිතා කරන්නන් ඇතුළත් කිරීම සඳහා Ctrl + A රේඛාව වෙනස් කිරීමයි:(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
MForMarlon

291

මෙම 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();
  }
}

12
ජර්මානු සැකසුම් eeepc 900. හොඳ භාවිතයන් සඳහා සමහර යතුරු ක්‍රියා නොකරයි: - බැක්ස්පේස් (යතුරු කේතය: 8) - සංචාලන යතුර වමට සහ දකුණට (යතුරු කේතය: 37, 38) පිටපත් කර ඇලවිය හැකිය ...
මයිකල් පියන්ඩ්ල්

11
බොහෝ අය සැලකිලිමත් වන අතර, ස්ක්‍රිප්ට් දෝෂයක් පෙන්වීම ඔබේ වෙබ් අඩවියේ දුර්වල ලෙස පිළිබිඹු වේ.
රොබට් ජෙප්සන්

14
මෙම කේතය සමඟ ගැටළු කිහිපයක්. ඔබට ඇතුළු විය හැකිය. එක් වරකට වඩා, දෙවනුව එය මකාදැමීමේ යතුරට ඉඩ නොදේ, කිසියම් විසඳුමක් තිබේද?
coure2011

4
මම බැක්ස්පේස්, මකාදැමීම සහ ඊතල ක්‍රියා නොකිරීම ගැන සැලකිලිමත් වීමි. ඔබ "theEvent.keycode ||" ඉවත් කර එකතු කරන්නේ නම්: "if (/ [- ~] / &&! Regex.test (key)) if" නම් එය වඩා හොඳින් ක්‍රියා කරයි (කෙසේ වෙතත් ASCII / UTF සඳහා). නමුත් එවිට එය චීන අක්ෂර ප්‍රතික්ෂේප නොකරනු ඇත! :)
සෑම් වොට්කින්ස්

4
මෙය යමෙකුට අහඹු දේවල් ආදානයට ඇලවීමට ඉඩ දෙයි
Vitim.us

141

මේ සඳහා හොඳ පිළිතුරක් ලබා ගැනීම සඳහා මම දිගු හා වෙහෙස මහන්සි වී සොයා බැලුවෙමි, අපට එය අතිශයින්ම අවශ්‍යය <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) )">

4
ආදාන වර්ගය = "අංකය" HTML 5 හි එනවා - ඔබට ජාවාස්ක්‍රිප්ට් නැවත වැටෙන පොලිෆිල් එකක් ලෙස භාවිතා කළ හැකිය ... stevefenton.co.uk/Content/Blog/Date/201105/Blog/…
ෆෙන්ටන්

5
හොඳ ක්‍රමයක් නමුත් පිළිගත නොහැකි යතුරක් එබීමෙන් හා බිඳ දැමිය හැකිය
ස්කොට් බ්‍රවුන්


12
@boecko මේ සඳහා ස්තූතියි, නමුත් එය /[^\d]+/ඒ වෙනුවට විය යුතු බව සලකන්න . හොඳ විසඳුමක්. එසේම @ user235859
මොසෙල්මන්

11
.ඔහුටද ඉඩ දීමට අවශ්‍ය විය . ඔබ සැබවින්ම එය සෑදිය යුතුයි/[^0-9.]/g
Qsario

103

මෙන්න හරියටම දශමයකට ඉඩ දෙන සරල එකක්, නමුත් තවත් නැත:

<input type="text" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');" />


15
හැන්ඩ්ල්ස්: පිටපත් + පේස්ට්, ඩ්‍රොප් ඩ්‍රොප්, දශම 1 ක්, ටැබ්, මකාදැමීම, බැක්ස්පේස් එක පමණක් ඉඩ දෙයි - මෙය භාවිතා කරන්න
ගණිතය

Oninput තුළ ඇති මෙම තර්කනය ගෝලීයව භාවිතා කළ හැකි වන පරිදි උකහා ගත හැකිද?
ඊමා

@ema - ඔව්, පංතිය භාවිතයෙන් ඔබට රීතිය ක්‍රියාත්මක කළ හැකි ආකාරය පෙන්වන මගේ අනෙක් පිළිතුර මෙතැනින් බලන්න .
billynoah

ඔබ මෙය කෝණික ස්වරූපයෙන් භාවිතා කරන්නේ නම්, ආකෘති පාලන අගයේ අගය යාවත්කාලීන නොවේ.
Ale_info

නියමයි. මම සිද්ධිය this.value = this.value.replace (/ [^ 0-9 .-] / g, '') ලෙස වෙනස් කරමි .ප්‍රතිස්ථාපනය කරන්න (/(\..*)\./ g, '$ 1'). ආදේශ කරන්න (/ ^ 0 + / g, '') .ප්‍රස්ථාරය (/ (? <! ^) - / g, ''); මේ ආකාරයෙන් එය හසුරුවන්නේ a - ආරම්භයේදීම වන අතර අංකයේ ආරම්භයේ 0 ට ඉඩ නොදේ.
බ්‍රෙන්ත්

54

මට තවත් හොඳ උදාහරණයක්:

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" />

මෙන්න jsFiddle උදාහරණයක්


අලවා ඇති පෙළ ගැන කුමක් කිව හැකිද?
ජේසන් එබර්සි

මම මෙම ශ්‍රිතය අමතන විට "සිදුවීම නිර්වචනය නොකෙරේ" ඇයි?
වින්සන්ට්

2
event.keyCode සෑම විටම ආපසු ලබා දෙන විට මෙය ෆයර්ෆොක්ස් හි ක්‍රියා නොකරයි. මම නව කේතයක් සමඟ සවි කළෙමි: ශ්‍රිතය වලංගු කරන්න (අංකය) event.charCode || event.keyCode || 0; if (key == 8 || key == 46 || key == 37 || key == 39) {true true; } else නම් (යතුර <48 || යතුර> 57) false වැරදි ලෙස ආපසු එවන්න; true නැවත පැමිණීම; };
Luan Nguyen

1
Ess ජෙසිකා පැවසූ පරිදි, ඔබ කැම් අපෝස්ට්‍රොෆි සහ ප්‍රතිශත ලකුණ පවා එක් කරයි.
ඇලෙජැන්ඩ්‍රෝ නවා

1
ඉතා සමීපයි! නමුත් දශමයකට වඩා ඉඩ දෙයි.
ක්‍රොස්

53

මෙහි බොහෝ පිළිතුරු සියල්ලටම යතුරු සිදුවීම් භාවිතා කිරීමේ දුර්වලතාවයක් ඇත .

යතුරුපුවරු මැක්‍රෝස්, පිටපත් + පේස්ට් සහ අනවශ්‍ය හැසිරීම් සමඟ පෙළ තෝරා ගැනීමේ හැකියාව බොහෝ පිළිතුරු මගින් සීමා කරනු ඇත, අනෙක් ඒවා විශේෂිත jQuery ප්ලගීන මත රඳා පවතින බව පෙනේ.

ආදාන යාන්ත්‍රණය (යතුරු ආ roke ාතය, පිටපත් + පේස්ට්, රයිට් ක්ලික් පිටපත + පේස්ට්, කථන සිට පෙළ දක්වා) නොසලකා මෙම සරල විසඳුම මට හරස් වේදිකාවක් සඳහා වඩාත් සුදුසු බව පෙනේ. සියලුම පෙළ තේරීමේ යතුරුපුවරු මැක්‍රෝස් තවමත් ක්‍රියාත්මක වන අතර, එය ස්ක්‍රිප්ට් මගින් සංඛ්‍යාත්මක නොවන අගයක් සැකසීමේ හැකියාව පවා සීමා කරයි.

function forceNumeric(){
    var $input = $(this);
    $input.val($input.val().replace(/[^\d]+/g,''));
}
$('body').on('propertychange input', 'input[type="number"]', forceNumeric);

jQuery 1.7+ අවශ්‍යයි. "පිටපත" හරහා ගිණුම් යෙදවුම් ලබා ගන්නා බැවින් මෙය වඩාත් සම්පූර්ණ පිළිතුරකි. එය ද සරල ය!
මේමොචිපන්

විකල්ප රීජෙක්ස්: replace(/[^\d]+/g,'')සියලු ඉලක්කම් නොවන හිස් හිස් වෙනුවට ආදේශ කරන්න. "I" (සිද්ධි සංවේදී නොවන) විකරණකාරකය අවශ්‍ය නොවේ.
මේමොචිපන්

ටැගයක ඇති “ඔන්කි” සිදුවීම් හසුරුවන්නන් තවදුරටත් ප්‍රචාරය නොකළ යුතු බැවින් මෙය ඉහළින් තිබිය යුතුය ...
gpinkas

මෙය නියත වශයෙන්ම මෙහි හොඳම පිළිතුර වන නමුත් එය දශම සංඛ්‍යා සහිත ඉලක්කම් වලට ඉඩ නොදේ. එය ක්‍රියාත්මක වන්නේ කෙසේදැයි යම් අදහසක් තිබේද?
අටිරාග්

8
Ti අටිරාග් ඔබට දශම අවශ්‍ය නම් ඔබට රීජෙක්ස් වෙනස් කළ හැකිය/[^\d,.]+/
EJTH

52

HTML5 සතුව ඇත <input type=number>, එය ඔබට ගැලපේ. දැනට, ඔපෙරා පමණක් ස්වදේශීයව එයට සහාය දක්වයි, නමුත් ජාවාස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීමේ ව්‍යාපෘතියක් තිබේ.


මෙම ගුණාංගයට සහය දක්වන බ්‍රව්සර් මොනවාද යන්න නිර්වචනය කරන ලේඛනයක් මෙන්න: caniuse.com/input-number . මෙය ලිවීමේදී, ක්‍රෝම් සහ සෆාරි යන දෙකම මෙම වර්ගයේ ක්ෂේත්‍රයට පූර්ණ සහය දක්වයි. IE 10 ට අර්ධ සහය ඇති අතර ෆයර්ෆොක්ස් සඳහා සහය නොමැත.
නේතන් වොලස්

මෙහි ඇති එකම ගැටළුව type=numberIE9
J Rod

@JRod පැරණි IE සඳහා පොලිෆිල් එකක් තිබේ. වැඩි විස්තර මෙහි .
jkdev

7
පළමු ගැටළුව වන්නේ අංකයට සලකන නිසා වර්‍ගයට type=numberඉඩ දීමයි . දෙවන ගැටළුව නම්, ආදානයේ ඇති උපරිම අක්ෂර ගණන ඔබට සීමා කළ නොහැක. ee+10
Hakan Fıstık

තවත් ගැටළුවක් නම් වර්ගය අංකයක් නම් මට වර්ගය සැකසීමේ ප්‍රතිලාභ ලබා ගත නොහැක, උදාහරණයක් ලෙස: "ටෙල්".
ස්කොටිබ්ලේඩ්ස්

41

මෙහි සඳහන් පිළිතුරු දෙකේ එකතුවක් භාවිතා කිරීමට මම තීරණය කළෙමි

<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);">


විශිෂ්ට පිළිතුර ... +1. ඔබට if ප්‍රකාශය පහත පරිදි අඩු කළ හැකිය: return !(charCode > 31 && (charCode < 48 || charCode > 57));
schadeck

7
කෙසේ වෙතත් මකා දැමීම ගැන කුමක් කිව හැකිද? ඔබට අංක අවශ්‍ය නමුත් බොහෝ විට ඔබට අවශ්‍ය වන්නේ පිටුව නැවුම් නොකර ඒවා නිවැරදි කිරීමට මිනිසුන්ට හැකි වීමයි ...
මාටින් එරික්

40

HTML5 රීජෙක්ස් සඳහා සහය දක්වයි, එබැවින් ඔබට මෙය භාවිතා කළ හැකිය:

<input id="numbersOnly" pattern="[0-9.]+" type="text">

අවවාදයයි: සමහර බ්‍රව්සර් තවමත් මෙයට සහය නොදක්වයි.


7
HTML5 ද ඇත <input type=number>.
මතියස් බයිනස්

සැබෑ. ඔබ මෙය පිළිතුරක් කළ යුතුයි. අපොයි, @ Ms2ger දැනටමත් ඇත.
james.garriss

<ආදාන වර්ගය = අංකය> සමහර බ්‍රව්සර්වල වැඩි කිරීම හා අඩුවීම සඳහා ඊතල එකතු කරයි, එබැවින් අපට දඟ පන්දු යවන්නා වළක්වා ගැනීමට අවශ්‍ය වූ විට මෙය හොඳ විසඳුමක් සේ පෙනේ
අයිරාඩ්

40
රටාව පරික්ෂා කරනු ලබන්නේ ඉදිරිපත් කිරීමෙන් පමණි. ඔබට තවමත් අකුරු ඇතුළත් කළ හැකිය.
අර්වින්

මොකක්ද කරන්නේ + රටාව විශේෂණය වූ ද?
ප්ලැනට් හැකර්ස්

18

ජාවාස්ක්‍රිප්ට්

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();
    }
}

අමතර ඔබට කොමාව, කාල සීමාව සහ us ණ එකතු කළ හැකිය (, .-)

  // comma, period and minus, . on keypad
  key == 190 || key == 188 || key == 109 || key == 110 ||

HTML

<input type="text" onkeydown="validateNumber(event);"/ >

අංකයක් ඇතුළත් කිරීම සඳහා මාරුවීමේ යතුර භාවිතා කළ යුතු යතුරුපුවරුවල නිවැරදිව ක්‍රියා නොකරයි (උදා: යුරෝපීය AZERTY යතුරු පුවරුව).
කැප්ටන් සංවේදී

ස්තූතියි මචං, ඔයාට ඇත්තටම ප්‍රශ්නයක් තේරෙනවා! හොඳ උදාහරණයක් සහ පා course මාලා හැසිරවීම. හෝ, (බොහෝ දෙනා සංඛ්‍යා සමඟ වැඩ කරන්නේ නම් එය අවශ්‍ය වේ)
real_yggdrasil

සංඛ්‍යාත්මක නොවන අගයන් ඇලවීම වළක්වන එකම එක මෙයයි.
ඩෙරෙක් ලී

16

හරිම සරලයි ....

// ජාවාස්ක්‍රිප්ට් ශ්‍රිතයක (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 කින් යුත් අංකයකට ඉඩ දෙයි)


එය නොකරන්න! මෙය සියල්ල අවහිර කරයි, අංක පෑඩ්, ඊතල යතුරු, මකන යතුර, කෙටිමං (උදාහරණයක් ලෙස CTRL + A, CTRL + R), TAB යතුර පවා එය ඇත්තෙන්ම කරදරකාරී ය!
කෝරි

Or කෝරි මම අනුගමනය නොකරමි, ගැටලුව කුමක්ද? එය මගේ නඩුවේ හොඳින් ක්‍රියාත්මක විය.
uneakharsh

පළමු පේළිය පහත පරිදි වෙනස් කළ යුතුය:var charCode = (evt.which) ? evt.which : evt.keyCode;
peiman F.

15

විසඳුම් 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);"/>

සිත්ගන්නා කරුණ නම්, මට රීජෙක්ස් ලබා දීමට සිදු වූයේ "^ \\ d \\?
පෝල් ටොම්බ්ලින්

මම හිතන්නේ සාමාන්‍ය ප්‍රකාශනය වැරදියි. මම මෙම රේඛාව භාවිතා කළෙමි:var regExpr = /^\d+(\.\d*)?$/;
කොස්ටා

පරිශීලකයාට ආදානය කිරීමට අවශ්‍ය නම් .123(ඒ වෙනුවට 0.123) උදාහරණයක් ලෙස කොස්ටා විශ්වාස නැද්ද?
රොමේන් ලින්සෝලාස්

@romaintaz. ඔබ හරි, නමුත් තිත ඉදිරිපිට ඉලක්කම් නොමැති නම් තිතට පසුව ඉලක්කම් ඇති බව තහවුරු කර ගැනීම සඳහා සාමාන්‍ය ප්‍රකාශනය වෙනස් කළ යුතුය. මේ වගේ දෙයක්: var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;.
කොස්ටා

14

ආරක්ෂිත ප්‍රවේශයක් වන්නේ යතුරු එබීම සහ යතුරු කේත පෙරීමට උත්සාහ කිරීම වෙනුවට ආදානයේ වටිනාකම පරීක්ෂා කිරීමයි.

මේ ආකාරයෙන් පරිශීලකයාට යතුරුපුවරු ඊතල, නවීකරණ යතුරු, බැක්ස්පේස්, මකාදැමීම, සම්මත නොවන යතුරුපුවරු භාවිතා කිරීම, ඇලවීම සඳහා මූසිකය භාවිතා කිරීම, පෙළ ඇදගෙන යාම සහ අතහැර දැමීමේ පෙළ භාවිතා කිරීම, ප්‍රවේශවීමේ යෙදවුම් භාවිතා කිරීම පවා නොමිලේ.

පහත ස්ක්‍රිප්ටය ධනාත්මක හා negative ණ සංඛ්‍යා වලට ඉඩ දෙයි

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>

සංස්කරණය කරන්න: මම මගේ පැරණි පිළිතුර ඉවත් කළේ එය දැන් පැරණි යැයි සිතන බැවිනි.


මෙය සැබවින්ම බොහෝ අවස්ථාවන් ආවරණය වන බව පෙනේ
සියා උල් රෙහ්මාන් මෝගල්

13

මේ සඳහා ඔබට රටාව භාවිතා කළ හැකිය:

<input id="numbers" pattern="[0-9.]+" type="number">

මෙහිදී ඔබට සම්පූර්ණ ජංගම වෙබ් අඩවි අතුරුමුහුණත් දැක ගත හැකිය .


IE8 සහ 9 හි වැඩ නොකරන්න . තවමත් හොඳ පිළිතුරක්.
aloisdg codidact.com වෙත මාරු වීම

දෝෂය පෙන්වීම සඳහා ඔබට මාතෘකාවක් = "අංක පමණක්" එකතු කළ හැකිය
thouliha

13

කරුණාකර පහත සඳහන් විසඳුම සොයා ගන්න. මෙම පරිශීලක පමණක් ඇතුළු කිරීමට හැකි විය හැකි 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">

එය ක්‍රියාත්මක නොවන්නේ නම් මට දන්වන්න.


12

ආදාන ක්ෂේත්‍රය තුළ ඔබට සංඛ්‍යා පමණක් එකතු කළ හැකි තවත් එක් උදාහරණයක් , අකුරු කළ නොහැක

<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');">

11

ඔබට ඇල්ෆා හෝ සංඛ්‍යා අතර උපාංගයට (සමහර විට ජංගම දුරකථනයක්) යෝජනා කිරීමට අවශ්‍ය නම් ඔබට භාවිතා කළ හැකිය <input type="number">.


10

Event.keyCode හෝ event.which: වෙනුවට jQuery භාවිතා කර කෙටි (මිහිරි) ක්‍රියාත්මක කරන්න.

$('input.numeric').live('keyup', function(e) {
  $(this).val($(this).val().replace(/[^0-9]/g, ''));
});

ටයිප් කළ අකුර මොහොතකින් දිස්වන කුඩා අතුරු ආබාධයක් පමණක් වන අතර CTRL / CMD + A ටිකක් අමුතු ලෙස හැසිරේ.


9

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;
peiman F.

9

ජාවාස්ක්‍රිප්ට් කේතය:

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 ක් වන අතර රීජෙක්ස් ප්‍රකාශනයක් එයට ඉඩ නොදෙන නිසා එය හොඳින් ක්‍රියා කරයි, එබැවින් එය දෝෂය මඟ හැරීමට පහසු ක්‍රමයකි :)


9

type = "number" භාවිතා කරන්න දැන් මෙම ගුණාංගය බොහෝ බ්‍රව්සර් වල සහය දක්වයි

<input type="number" maxlength="3" ng-bind="first">

මම දත්ත පරීක්ෂා කර නැත --1(1 ට පෙර අක්ෂර 2 ක්).
Ngoc Nam

9

මෙම ගැටළුව විසඳීම සඳහා පහසු ක්‍රමයක් නම්, පෙළ කොටුව තුළ ටයිප් කර ඇති අක්ෂර රීජෙක්ස් සමඟ වලංගු කිරීම සඳහා 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"/>


		


8

JQuery භාවිතයෙන් වෙනත් ප්‍රභේදයක් පමණි

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});

6

ඔබට ආදාන අගය (පෙරනිමියෙන් නූල් ලෙස සලකනු ලැබේ) සංඛ්‍යාත්මකව බලෙන් සමාන කළ හැකිය, වැනි:

if(event.target.value == event.target.value * 1) {
    // returns true if input value is numeric string
}

කෙසේ වෙතත්, ඔබ එය යතුරු වැනි සිදුවීම් සමඟ බැඳිය යුතුය.


6
<input name="amount" type="text" value="Only number in here"/> 

<script>
    $('input[name=amount]').keyup(function(){
        $(this).val($(this).val().replace(/[^\d]/,''));
    });
</script>

6

මම ඉතා හොඳ පිළිතුරු කිහිපයක් දුටුවෙමි, කෙසේ වෙතත් මම ඒවාට හැකි තරම් කුඩා හා සරල ලෙස කැමතියි, එබැවින් සමහර විට එයින් කෙනෙකුට ප්‍රයෝජන ලැබෙනු ඇත. මම මේ වගේ ජාවාස්ක්‍රිප්ට් Number()සහ isNaNක්‍රියාකාරිත්වය භාවිතා කරමි :

if(isNaN(Number(str))) {
   // ... Exception it is NOT a number
} else {
   // ... Do something you have a number
}

මෙය උපකාරී වේ යැයි සිතමි.


1
මම මෙයට කැමතියි! එවැනි අලංකාර විසඳුමක්, රීජෙක්ස් සම්බන්ධ නොවේ.
ලෙවී රොබට්ස්

මෙය ප්‍රශ්නයට පිළිතුරක් නොවේ, OP ඉල්ලා සිටියේ ආදානයකට පෙළ පමණක් ඉඩ දෙන ලෙසටය, පසුව සත්‍යාපනය නොකරයි.
දැව

ඔව්, එය සත්‍යයකි! නමුත් දැනටමත් පිළිගත් පිළිතුරක් ඇත, එය හොඳ යැයි මම සිතමි, නමුත් මෙය යමෙකුට උපකාරී වනු ඇතැයි මම සිතුවෙමි, එය ලස්සන හා පිරිසිදුයි.
සිචා

5

මෙම 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();}
    }
}

... හෝ මෙම ස්ක්‍රිප්ට්, දර්ශක ඕෆ් නොමැතිව, දෙකක් භාවිතා කරමින් 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 ගුණාංගය භාවිතා කළෙමි, මන්ද onkeydown ගුණාංගය onkeypress ගුණාංගයට පෙර පරීක්ෂා කර ඇති බැවිනි. ගැටලුව පවතින්නේ ගූගල් ක්‍රෝම් බ්‍රව්සරයේ ය.

"ඔන්කිප්‍රෙස්" ගුණාංගය සමඟ, ගූගල් ක්‍රෝම් හි "වැළැක්වීමේ ඩීෆෝල්ට්" සමඟ TAB පාලනය කළ නොහැකි වනු ඇත, කෙසේ වෙතත්, "ඔන්කිඩවුන්" යන ගුණාංගය සමඟ, ටාබ් පාලනය කළ හැකිය!

TAB => 9 සඳහා ASCII කේතය

පළමු ස්ක්‍රිප්ටයට දෙවැන්නාට වඩා අඩු කේතයක් ඇත, කෙසේ වෙතත්, ASCII අක්ෂරවල සියලු යතුරු තිබිය යුතුය.

දෙවන ස්ක්‍රිප්ට් එක පළමු එකට වඩා විශාල ය, නමුත් අරාව සඳහා සියලු යතුරු අවශ්‍ය නොවේ. අරාවෙහි එක් එක් ස්ථානයෙහි පළමු ඉලක්කම් වන්නේ එක් එක් ස්ථානය කියවන වාර ගණනයි. සෑම කියවීමක් සඳහාම, ඊළඟට 1 දක්වා වැඩි කෙරේ. උදාහරණයක් ලෙස:




NCount = 0

48 + NCount = 48

NCount + +

48 + NCount = 49

NCount + +

...

48 + NCount = 57




සංඛ්‍යාත්මක යතුරු සම්බන්ධයෙන් 10 (0 - 9) ක් පමණි, නමුත් ඒවා මිලියනයක් නම් මෙම සියලු යතුරු සමඟ අරාවක් සෑදීම අර්ථවත් නොවේ.

ASCII කේත:

  • 8 ==> (බැක්ස්පේස්);
  • 46 => (මකන්න);
  • 37 => (වම් ඊතලය);
  • 39 => (දකුණු ඊතලය);
  • 48 - 57 => (අංක);
  • 36 => (නිවස);
  • 35 => (අවසානය);

5

මෙය වැඩිදියුණු කළ ශ්‍රිතයකි:

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();
  }
}

4

හොඳම ක්‍රමය (සියලු වර්ගවල සංඛ්‍යා වලට ඉඩ දෙන්න - සැබෑ negative ණ, සැබෑ ධනාත්මක, ඉන්ටෙගර් negative ණ, පූර්ණ සංඛ්‍යා ධනාත්මක):

$(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

Geowa4 හි විසඳුමේ දීර් version අනුවාදය මෙයයි . සහාය 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'));
            }
    }); 
});

@UserB මෙය කිසිවක් මකා නොදැමිය යුතුය.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.