web-dev-qa-db-fra.com

Vérifier si l'entrée est un chiffre ou une lettre javascript

J'utilise des formulaires en HTML et en javascript. Je souhaite qu'une alerte ne s'affiche que si l'utilisateur entre unLETTREet clique sur submit.

J'ai donc le code HTML:

<form name="myForm" action="" onsubmit="return checkInp()" method="post">
    First name: <input type="text" name="age">
<input type="submit" value="Submit">   

Et le code javascript:

function checkInp()
{
var x=document.forms["myForm"]["age"].value;
if (x consists of any letters) // this is the code I need to change
{
alert("Must input numbers");
return false;
}
}
57
Greg Peckory

Vous pouvez utiliser la fonction isNaN pour déterminer si une valeur ne doit pas être convertie en nombre. Exemple comme ci-dessous:

function checkInp()
{
  var x=document.forms["myForm"]["age"].value;
  if (isNaN(x)) 
  {
    alert("Must input numbers");
    return false;
  }
}
96
Bat_Programmer

Utilisez Expression régulière pour ne faire correspondre que les lettres. Il est également bon d’avoir des connaissances sur, si jamais vous avez besoin de faire quelque chose de plus compliqué, comme s’assurer que le nombre de chiffres est exact.

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    var regex=/^[a-zA-Z]+$/;
    if (!x.match(regex))
    {
        alert("Must input string");
        return false;
    }
}

Encore mieux serait de nier tout sauf des chiffres:

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    var regex=/^[0-9]+$/;
    if (x.match(regex))
    {
        alert("Must input numbers");
        return false;
    }
}
23
Kim Kling

Vous pouvez utiliser la fonction isNaN . Il renvoie true si les données ne sont pas un nombre. Ce serait quelque chose comme ça:

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    if (isNaN(x)) // this is the code I need to change
    {
        alert("Must input numbers");
        return false;
    }
}

Remarque: isNan considère 10.2 comme un nombre valide.

9
mael

vous pouvez utiliser isNaN (). il renvoie vrai lorsque les données ne sont pas un nombre.

var data = 'hello there';
if(isNaN(data)){
  alert("it is not number");
}else {
  alert("its a valid number");
}
4
Deepak Gangore

Essaye ça:

if(parseInt("0"+x, 10) > 0){/* x is integer */}
3
Masoud Nazari

Il suffit de trouver le reste en divisant par 1, soit x% 1. Si le reste est 0, cela signifie que x est un nombre entier. Sinon, vous devez afficher le message "Doit entrer des nombres". Cela fonctionnera même dans le cas de chaînes, de nombres décimaux, etc.

function checkInp()
{
    var x = document.forms["myForm"]["age"].value;
    if ((x%1) != 0) 
    {
        alert("Must input numbers");
        return false;
    }
}
3
Crypters
function isNumber(data){
    data = data +"e1";                      // Disallow eng. notation "10e2"+"e1" is NaN
    var clean = parseFloat(data,10) / data ; // 1 if parsed cleanly
    return (clean && (data/data) === 1.0);  // Checks for NaN
}

function isInteger(data){
    data = data +"e1";                      // Disallow eng. notation "10e2"+"e1" is NaN
    var clean = parseInt(data,10) / data ; // 1 if parsed cleanly
    return (clean && (data%1) === 0);          // Checks For integer and NaN
}
1
visibleman

Un meilleur code (sans erreur) serait comme:

function isReallyNumber(data) {
    return typeof data === 'number' && !isNaN(data);
}

Cela gérera aussi les chaînes vides. Une autre raison, isNaN("12") est égal à false, mais "12" est une chaîne et non un nombre; elle devrait donc donner true. Enfin, un lien bonus qui pourrait vous intéresser.

1
Ram Patra

Je sais que ce post est vieux, mais c’est le premier qui est apparu lorsque j’ai fait une recherche. J'ai essayé @Kim Kling RegExp mais cela a lamentablement échoué. Aussi, avant de trouver ce forum, j'avais essayé presque toutes les autres variantes énumérées ici. À la fin, aucun d’entre eux n’a fonctionné, sauf celui que j’ai créé; ça marche bien, en plus c'est es6:

    let regex = new RegExp(/[^0-9]/, 'g');
    let x = document.forms["myForm"]["age"].value;

    if (x.match(regex)) {
       alert("Must be a valid number");
            return
    }
1
str8up7od

La méthode la plus moderne et la plus efficace est typeof (variable) si vous vous souciez du nombre réel et non du nombre de chaîne. Par exemple:

var a = 1;
var b = '1';

typeof a: // Output: "number"
typeof b: // Output: "string
0
user8621657

Je pense que le plus simple serait de créer un objet Number avec la chaîne et de vérifier si, avec l'aide de la fonction isInteger fournie par la classe Number.

Number.isInteger(Number('1')) //true
Number.isInteger(Number('1 mango')) //false
Number.isInteger(Number(1)) //true
Number.isInteger(Number(1.9)) //false
0
Vikas Bansal