tiene solo saber numeros numero mostrar limitar decimales cuantos con como javascript html

javascript - saber - solo numeros angular 4



Restringir entrada al cuadro de texto: permitiendo solo nĂºmeros y punto decimal (30)

¿Estás buscando algo así?

<HTML> <HEAD> <SCRIPT language=Javascript> <!-- function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } //--> </SCRIPT> </HEAD> <BODY> <INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar"> </BODY> </HTML>

¿Cómo puedo restringir la entrada a un cuadro de texto para que solo acepte números y el punto decimal?


A partir de @rebisco respuesta:

function count_appearance(mainStr, searchFor) { return (mainStr.split(searchFor).length - 1); } function isNumberKey(evt) { $return = true; var charCode = (evt.which) ? evt.which : event.keyCode; if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) $return = false; $val = $(evt.originalTarget).val(); if (charCode == 46) { if (count_appearance($val, ''.'') > 0) { $return = false; } if ($val.length == 0) { $return = false; } } return $return; }

Solo permite este formato: 123123123 [.121213]

Demo aquí demo


Aquí hay una solución más que permite números decimales y también limita los dígitos después de decimal a 2 decimales.

function isNumberKey(evt, element) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57) && !(charCode == 46 || charCode == 8)) return false; else { var len = $(element).val().length; var index = $(element).val().indexOf(''.''); if (index > 0 && charCode == 46) { return false; } if (index > 0) { var CharAfterdot = (len + 1) - index; if (CharAfterdot > 3) { return false; } } } return true; }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="number" id="rate" placeholder="Billing Rate" required onkeypress="return isNumberKey(event,this)">


El siguiente código funcionó para mí

El cuadro de entrada con el evento "onkeypress" de la siguiente manera

<input type="text" onkeypress="return isNumberKey(this,event);" />

La función "isNumberKey" es la siguiente

function isNumberKey(txt, evt) { var charCode = (evt.which) ? evt.which : evt.keyCode; if (charCode == 46) { //Check if the text already contains the . character if (txt.value.indexOf(''.'') === -1) { return true; } else { return false; } } else { if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; } return true; }


Espero que funcione para ti.

<input type="text" onkeypress="return chkNumeric(event)" /> <script> function chkNumeric(evt) { evt = (evt) ? evt : window.event; var charCode = (evt.which) ? evt.which : evt.keyCode; if (charCode > 31 && (charCode < 48 || charCode > 57)) { if (charCode == 46) { return true; } else { return false; } } return true; } </script>


Extendiendo la respuesta de @ rebisco. este código a continuación permitirá solo números y solo ''.'' (período) en el cuadro de texto.

function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode; if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) { return false; } else { // If the number field already has . then don''t allow to enter . again. if (evt.target.value.search(//./) > -1 && charCode == 46) { return false; } return true; } }


La mejor solución de trabajo con muestra de Pure-JavaScript. Demostración en vivo: https://jsfiddle.net/manoj2010/ygkpa89o/

<script> function removeCommas(nStr) { if (nStr == null || nStr == "") return ""; return nStr.toString().replace(/,/g, ""); } function NumbersOnly(myfield, e, dec,neg) { if (isNaN(removeCommas(myfield.value)) && myfield.value != "-") { return false; } var allowNegativeNumber = neg || false; var key; var keychar; if (window.event) key = window.event.keyCode; else if (e) key = e.which; else return true; keychar = String.fromCharCode(key); var srcEl = e.srcElement ? e.srcElement : e.target; // control keys if ((key == null) || (key == 0) || (key == 8) || (key == 9) || (key == 13) || (key == 27)) return true; // numbers else if ((("0123456789").indexOf(keychar) > -1)) return true; // decimal point jump else if (dec && (keychar == ".")) { //myfield.form.elements[dec].focus(); return srcEl.value.indexOf(".") == -1; } //allow negative numbers else if (allowNegativeNumber && (keychar == "-")) { return (srcEl.value.length == 0 || srcEl.value == "0.00") } else return false; } </script> <input name="txtDiscountSum" type="text" onKeyPress="return NumbersOnly(this, event,true)" />


La solución aceptada no está completa, ya que puede ingresar múltiples ''.'', Por ejemplo 24 .... 22..22. con algunas modificaciones pequeñas funcionará según lo previsto:

<HTML><HEAD> <script type="text/javascript"> function isNumberKey(txt, evt) { var charCode = (evt.which) ? evt.which : evt.keyCode; if (charCode == 46) { //Check if the text already contains the . character if (txt.value.indexOf(''.'') === -1) { return true; } else { return false; } } else { if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; } return true; } </SCRIPT></HEAD><BODY> <input type="text" onkeypress="return isNumberKey(this, event);" /> </BODY></HTML>


Mejor solución

var checkfloats = function(event){ var charCode = (event.which) ? event.which : event.keyCode; if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) return false; if(event.target.value.indexOf(''.'') >=0 && charCode == 46) return false; return true; }


Observé que para todas las respuestas proporcionadas aquí, las cosas no funcionan si seleccionamos alguna parte del texto en el cuadro de texto e intentamos sobrescribir esa parte. Así que modifiqué la función, que es la siguiente:

<HTML> <HEAD> <SCRIPT language=Javascript> <!-- function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode; if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) { return false; } if (charCode == 46 && evt.srcElement.value.split(''.'').length>1 ) { return false; } if(evt.srcElement.selectionStart<evt.srcElement.selectionEnd) { return true; } if(evt.srcElement.value.split(''.'').length>1 && evt.srcElement.value.split(''.'')[1].length==2) { return false; } return true; } //--> </SCRIPT> </HEAD> <BODY> <INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar"> </BODY> </HTML>


Para cualquiera que tropiece aquí como yo, aquí hay una versión de jQuery 1.10.2 que escribí y que funciona muy bien para mí, aunque requiera muchos recursos:

/*************************************************** * Only allow numbers and one decimal in text boxes ***************************************************/ $(''body'').on(''keydown keyup keypress change blur focus paste'', ''input[type="text"]'', function(){ var target = $(this); var prev_val = target.val(); setTimeout(function(){ var chars = target.val().split(""); var decimal_exist = false; var remove_char = false; $.each(chars, function(key, value){ switch(value){ case ''0'': case ''1'': case ''2'': case ''3'': case ''4'': case ''5'': case ''6'': case ''7'': case ''8'': case ''9'': case ''.'': if(value === ''.''){ if(decimal_exist === false){ decimal_exist = true; } else{ remove_char = true; chars[''''+key+''''] = ''''; } } break; default: remove_char = true; chars[''''+key+''''] = ''''; break; } }); if(prev_val != target.val() && remove_char === true){ target.val(chars.join('''')) } }, 0); });


Para números decimales y también permitir números negativos con 2 lugares para decimales después del punto ... Modifiqué la función a:

<input type="text" id="txtSample" onkeypress="return isNumberKey(event,this)"/> function isNumberKey(evt, element){ var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57) && !(charCode == 46 || charCode == 8 || charCode == 45)) return false; else { var len = $(element).val().length; // Validation Point var index = $(element).val().indexOf(''.''); if ((index > 0 && charCode == 46) || len == 0 && charCode == 46) { return false; } if (index > 0) { var CharAfterdot = (len + 1) - index; if (CharAfterdot > 3) { return false; } } // Validating Negative sign index = $(element).val().indexOf(''-''); if ((index > 0 && charCode == 45) || (len > 0 && charCode == 45)) { return false; } } return true; }


Sé que esta pregunta es muy antigua, pero a menudo obtenemos esos requisitos. Hay muchos ejemplos, sin embargo, muchos parecen demasiado detallados o complejos para una simple implementación.

Consulte este https://jsfiddle.net/vibs2006/rn0fvxuk/ y mejore (si puede). Funciona en IE, Firefox, Chrome y Edge Browser.

Aquí está el código de trabajo.

function IsNumeric(e) { var IsValidationSuccessful = false; console.log(e.target.value); document.getElementById("info").innerHTML = "You just typed ''''" + e.key + "''''"; //console.log("e.Key Value = "+e.key); switch (e.key) { case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": case "0": case "Backspace": IsValidationSuccessful = true; break; case "Decimal": //Numpad Decimal in Edge Browser case ".": //Numpad Decimal in Chrome and Firefox case "Del": // Internet Explorer 11 and less Numpad Decimal if (e.target.value.indexOf(".") >= 1) //Checking if already Decimal exists { IsValidationSuccessful = false; } else { IsValidationSuccessful = true; } break; default: IsValidationSuccessful = false; } //debugger; if(IsValidationSuccessful == false){ document.getElementById("error").style = "display:Block"; }else{ document.getElementById("error").style = "display:none"; } return IsValidationSuccessful; }

Numeric Value: <input type="number" id="text1" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;" /><br /> <span id="error" style="color: Red; display: none">* Input digits (0 - 9) and Decimals Only</span><br /> <div id="info"></div>


Si lo quieres para valores flotantes,

Aquí está la función que estoy usando

<HTML> <HEAD> <SCRIPT language=Javascript> <!-- function check(e, value) { //Check Charater var unicode = e.charCode ? e.charCode : e.keyCode; if (value.indexOf(".") != -1) if (unicode == 46) return false; if (unicode != 8) if ((unicode < 48 || unicode > 57) && unicode != 46) return false; } //--> </SCRIPT> </HEAD> <BODY> <INPUT id="txtChar" onkeypress="return check(event,value)" type="text" name="txtChar"> </BODY> </HTML>


Solo necesita aplicar este método en Jquery y puede validar su cuadro de texto para solo aceptar el número con solo un decimal.

function IsFloatOnly(element) { var value = $(element).val(); var regExp ="^//d+(//.//d+)?$"; return value.match(regExp); }

Por favor, mira la demostración de trabajo here


Suponga que su nombre de campo de cuadro de texto es Income
Llame a este método de validación cuando necesite validar su campo:

function validate() { var currency = document.getElementById("Income").value; var pattern = /^[1-9]/d*(?:/./d{0,2})?$/ ; if (pattern.test(currency)) { alert("Currency is in valid format"); return true; } alert("Currency is not in valid format!Enter in 00.00 format"); return false; }


Todas las soluciones presentadas aquí usan eventos de clave única. Esto es muy propenso a errores ya que la entrada también puede darse usando copy''n''paste o drag''n''drop. Además, algunas de las soluciones restringen el uso de teclas que no son de carácter como ctrl+c , Pos1 , etc.

Sugiero que en lugar de verificar cada pulsación de tecla, compruebe si el resultado es válido con respecto a sus expectativas.

var validNumber = new RegExp(/^/d*/.?/d*$/); var lastValid = document.getElementById("test1").value; function validateNumber(elem) { if (validNumber.test(elem.value)) { lastValid = elem.value; } else { elem.value = lastValid; } }

<textarea id="test1" oninput="validateNumber(this);" ></textarea>

El evento de entrada se activa justo después de que se cambió algo en el área de texto y antes de que se procesara.

Puede extender el RegEx al formato de número que quiera aceptar. Esto es mucho más fácil de mantener y ampliable que la verificación de pulsaciones de una sola tecla.


Trabajando en el tema yo mismo, y eso es lo que tengo hasta ahora. Esto funciona más o menos, pero es imposible agregar menos después debido a la nueva comprobación de valor. Tampoco permite la coma como un separador de mil, solo decimal.

No es perfecto, pero podría dar algunas ideas.

app.directive(''isNumber'', function () { return function (scope, elem, attrs) { elem.bind(''keypress'', function (evt) { var keyCode = (evt.which) ? evt.which : event.keyCode; var testValue = (elem[0].value + String.fromCharCode(keyCode) + "0").replace(/ /g, ""); //check ignores spaces var regex = /^/-?/d+((/.|/,)/d+)?$/; var allowedChars = [8,9,13,27,32,37,39,44,45, 46] //control keys and separators //allows numbers, separators and controll keys and rejects others if ((keyCode > 47 && keyCode < 58) || allowedChars.indexOf(keyCode) >= 0) { //test the string with regex, decline if doesn''t fit if (elem[0].value != "" && !regex.test(testValue)) { event.preventDefault(); return false; } return true; } event.preventDefault(); return false; }); }; });

Permite:

11 11 .245 (en controlador formateado en desenfoque a 1111.245)

11,44

-123.123

-1 014

0123 (formateado en desenfoque a 123)

no permite:

ps

a B C

11.11.1

11,11.1

.42


Una pequeña corrección a la brillante respuesta de @ rebisco para validar el decimal a la perfección.

function isNumberKey(evt) { debugger; var charCode = (evt.which) ? evt.which : event.keyCode; if (charCode == 46 && evt.srcElement.value.split(''.'').length>1) { return false; } if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; }


aquí hay un script que te ayuda a:

<script type="text/javascript"> // price text-box allow numeric and allow 2 decimal points only function extractNumber(obj, decimalPlaces, allowNegative) { var temp = obj.value; // avoid changing things if already formatted correctly var reg0Str = ''[0-9]*''; if (decimalPlaces > 0) { reg0Str += ''/[/,/.]?[0-9]{0,'' + decimalPlaces + ''}''; } else if (decimalPlaces < 0) { reg0Str += ''/[/,/.]?[0-9]*''; } reg0Str = allowNegative ? ''^-?'' + reg0Str : ''^'' + reg0Str; reg0Str = reg0Str + ''$''; var reg0 = new RegExp(reg0Str); if (reg0.test(temp)) return true; // first replace all non numbers var reg1Str = ''[^0-9'' + (decimalPlaces != 0 ? ''.'' : '''') + (decimalPlaces != 0 ? '','' : '''') + (allowNegative ? ''-'' : '''') + '']''; var reg1 = new RegExp(reg1Str, ''g''); temp = temp.replace(reg1, ''''); if (allowNegative) { // replace extra negative var hasNegative = temp.length > 0 && temp.charAt(0) == ''-''; var reg2 = /-/g; temp = temp.replace(reg2, ''''); if (hasNegative) temp = ''-'' + temp; } if (decimalPlaces != 0) { var reg3 = /[/,/.]/g; var reg3Array = reg3.exec(temp); if (reg3Array != null) { // keep only first occurrence of . // and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0 var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length); reg3Right = reg3Right.replace(reg3, ''''); reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right; temp = temp.substring(0,reg3Array.index) + ''.'' + reg3Right; } } obj.value = temp; } function blockNonNumbers(obj, e, allowDecimal, allowNegative) { var key; var isCtrl = false; var keychar; var reg; if(window.event) { key = e.keyCode; isCtrl = window.event.ctrlKey } else if(e.which) { key = e.which; isCtrl = e.ctrlKey; } if (isNaN(key)) return true; keychar = String.fromCharCode(key); // check for backspace or delete, or if Ctrl was pressed if (key == 8 || isCtrl) { return true; } reg = //d/; var isFirstN = allowNegative ? keychar == ''-'' && obj.value.indexOf(''-'') == -1 : false; var isFirstD = allowDecimal ? keychar == ''.'' && obj.value.indexOf(''.'') == -1 : false; var isFirstC = allowDecimal ? keychar == '','' && obj.value.indexOf('','') == -1 : false; return isFirstN || isFirstD || isFirstC || reg.test(keychar); } function blockInvalid(obj) { var temp=obj.value; if(temp=="-") { temp=""; } if (temp.indexOf(".")==temp.length-1 && temp.indexOf(".")!=-1) { temp=temp+"00"; } if (temp.indexOf(".")==0) { temp="0"+temp; } if (temp.indexOf(".")==1 && temp.indexOf("-")==0) { temp=temp.replace("-","-0") ; } if (temp.indexOf(",")==temp.length-1 && temp.indexOf(",")!=-1) { temp=temp+"00"; } if (temp.indexOf(",")==0) { temp="0"+temp; } if (temp.indexOf(",")==1 && temp.indexOf("-")==0) { temp=temp.replace("-","-0") ; } temp=temp.replace(",",".") ; obj.value=temp; } // end of price text-box allow numeric and allow 2 decimal points only </script> <input type="Text" id="id" value="" onblur="extractNumber(this,2,true);blockInvalid(this);" onkeyup="extractNumber(this,2,true);" onkeypress="return blockNonNumbers(this, event, true, true);">


una forma alternativa de restringir la entrada a un cuadro de texto para que solo acepte números y el punto decimal es usar javascript dentro de la entrada html. Esto funciona para mí:

<input type="text" class="form-control" id="price" name="price" placeholder="Price" vrequired onkeyup="this.value=this.value.replace(/[^0-9.]/g, '''').replace(/(/..*)/./g, ''$1'')">

- Acepta--

9

9.99

--No acepto--

9.99.99

A B C


<HTML> <HEAD> <SCRIPT language=Javascript> <!-- function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : evt.keyCode; if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } //--> </SCRIPT> </HEAD> <BODY> <INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar"> </BODY> </HTML>

¡Esto realmente funciona!


<input type="text" class="number_only" /> <script> $(document).ready(function() { $(''.number_only'').keypress(function (event) { return isNumber(event, this) }); }); function isNumber(evt, element) { var charCode = (evt.which) ? evt.which : event.keyCode if ((charCode != 45 || $(element).val().indexOf(''-'') != -1) && (charCode != 46 || $(element).val().indexOf(''.'') != -1) && ((charCode < 48 && charCode != 8) || charCode > 57)){ return false; } else { return true; } } </script>

http://www.encodedna.com/2013/05/enter-only-numbers-using-jquery.htm


<input type="text" onkeypress="return isNumberKey(event,this)"> <script> function isNumberKey(evt, obj) { var charCode = (evt.which) ? evt.which : event.keyCode var value = obj.value; var dotcontains = value.indexOf(".") != -1; if (dotcontains) if (charCode == 46) return false; if (charCode == 46) return true; if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } </script>


<script type="text/javascript"> function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode; if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } </script>

@Html.EditorFor(model => model.Orderids, new { id = "Orderids", Onkeypress=isNumberKey(event)})

Esto funciona bien


document.getElementById(''value'').addEventListener(''keydown'', function(e) { var key = e.keyCode ? e.keyCode : e.which; /*lenght of value to use with index to know how many numbers after.*/ var len = $(''#value'').val().length; var index = $(''#value'').val().indexOf(''.''); if (!( [8, 9, 13, 27, 46, 110, 190].indexOf(key) !== -1 || (key == 65 && ( e.ctrlKey || e.metaKey ) ) || (key >= 35 && key <= 40) || (key >= 48 && key <= 57 && !(e.shiftKey || e.altKey)) || (key >= 96 && key <= 105) )){ e.preventDefault(); } /*if theres a . count how many and if reachs 2 digits after . it blocks*/ if (index > 0) { var CharAfterdot = (len + 1) - index; if (CharAfterdot > 3) { /*permits the backsapce to remove :D could be improved*/ if (!(key == 8)) { e.preventDefault(); } /*blocks if you try to add a new . */ }else if ( key == 110) { e.preventDefault(); } /*if you try to add a . and theres no digit yet it adds a 0.*/ } else if( key == 110&& len==0){ e.preventDefault(); $(''#value'').val(''0.''); } });


form.onsubmit = function(){ return textarea.value.match(/^/d+(/./d+)?$/); }

Es esto lo que estás buscando?

Espero que ayude.

EDITAR: edité mi ejemplo anterior para que solo haya un período, precedido por al menos un dígito y seguido de al menos un dígito.


function integerwithdot(s, iid){ var i; s = s.toString(); for (i = 0; i < s.length; i++){ var c; if (s.charAt(i) == ".") { } else { c = s.charAt(i); } if (isNaN(c)) { c = ""; for(i=0;i<s.length-1;i++){ c += s.charAt(i); } document.getElementById(iid).value = c; return false; } } return true; }


function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : evt.keyCode; if(charCode==8 || charCode==13|| charCode==99|| charCode==118 || charCode==46) { return true; } if (charCode > 31 && (charCode < 48 || charCode > 57)) { return false; } return true; }

Solo permitirá que sea numérico y te permitirá poner "." para decimal


inputelement.onchange= inputelement.onkeyup= function isnumber(e){ e= window.event? e.srcElement: e.target; while(e.value && parseFloat(e.value)+''''!= e.value){ e.value= e.value.slice(0, -1); } }