Vérifiez si une chaîne d'entrée contient un nombre en javascript


137

Mon objectif final est de valider un champ de saisie. L'entrée peut être alphabétique ou numérique.


4
Vous n'avez pas besoin de jQuery pour cela.
Šime Vidas

Veuillez modifier le titre de votre question, en quelque chose de plus précis comme "jQuery input valider uniquement les caractères alphabétiques" puisque votre description ne mène à aucune réponse sur "comment trouver des nombres dans une chaîne", donc il en résulte un résultat de recherche non pertinent pour notre communauté. Merci!
Juanma Guerrero

"JQuery" édité hors du titre de la question et remplacé par "Javascript".
VKen

@VKen, il n'est pas nécessaire de mettre des balises sur le titre.
Starx

@Starx a noté, je garde simplement le format avec lequel l'affiche de la question a commencé.
VKen

Réponses:


289

Si je ne me trompe pas, la question demande "contient un nombre", pas "est un nombre". Alors:

function hasNumber(myString) {
  return /\d/.test(myString);
}

1
Exactement ce dont j'avais besoin. Merci
AndyH

cette solution ne prend pas en compte les nombres non entiers comme 3.2 ou 1e4
ekkis

8
Cela fait. Archiver la console: hasNumber ("check 3.2 or 1e4") = true vs hasNumber ("check no numbers") = false. Parce que 3.2 et 1e4 contiennent des nombres en soi.
Zon le

Pourquoi cette réponse n'est-elle pas au top?
Rakesh Nair

Cela répond exactement à la question posée.
Zon

109

Vous pouvez le faire en utilisant javascript. Pas besoin de Jquery ou Regex

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

Lors de la mise en œuvre

var val = $('yourinputelement').val();
if(isNumeric(val)) { alert('number'); } 
else { alert('not number'); }

Mise à jour: pour vérifier si une chaîne contient des nombres, vous pouvez utiliser des expressions régulières pour le faire

var matches = val.match(/\d+/g);
if (matches != null) {
    alert('number');
}

2
matches != nullsignifie pas undefinedou nullalors que matches !== nullsignifie spécifiquement non nullmais passe undefined.
Nate

match()renvoie un tableau ou null. Donc ça if (matches !== null)devrait aller (et ça plaira à JSHint.) Source: developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
Jason

Cela devrait être isFinite(parseFloat(n))dans le premier exemple. isNumeric("5,000")échoue.
m.spyratos

@ m.spyratos, Eh bien, isFinite()donne true si la valeur passée est unfinite nombre et que nombre 5,000est une chaîne formatée de nombre et non un nombre fini.
Starx

@Starx, je suis d'accord. Mais si vous ne supportez pas la chaîne formatée comme entrée, alors pourquoi utilisez-vous l'analyse float in isNaN? Je suggérerais de supprimer le flottant d'analyse isNaNou de l'ajouter àisFinite celui-ci.
m.spyratos

22
function validate(){    
    var re = /^[A-Za-z]+$/;
    if(re.test(document.getElementById("textboxID").value))
       alert('Valid Name.');
    else
       alert('Invalid Name.');      
}

J'ai dû lire toute la question pour réaliser que cela répond exactement à la question posée. Le titre de la question est un peu trompeur.
Nate

9

Ce n'est en aucun cas à l'épreuve des balles, mais cela a fonctionné pour mes besoins et peut-être que cela aidera quelqu'un.

var value = $('input').val();
 if(parseInt(value)) {
  console.log(value+" is a number.");
 }
 else {
  console.log(value+" is NaN.");
 }

Boolean(parseInt(3)) -> true; Boolean(parseInt("3")) -> true; Boolean(parseInt("three")) -> false
Elon Zito

5

Utilisation d' expressions régulières avec JavaScript . Une expression régulière est une chaîne de texte spéciale pour décrire un modèle de recherche, qui est écrite sous la forme de / pattern / modifiers où "pattern" est l'expression régulière elle-même, et "modifiers" est une série de caractères indiquant diverses options.
         La classe de caractères est le concept de regex le plus basique après une correspondance littérale. Cela permet à une petite séquence de caractères de correspondre à un plus grand ensemble de caractères. Par exemple, [A-Z]pourrait représenter l'alphabet majuscule, et \dpourrait signifier n'importe quel chiffre.

Exemple ci-dessous

  • contains_alphaNumeric«Il vérifie si la chaîne contient une lettre ou un chiffre (ou) à la fois une lettre et un chiffre. Le tiret (-) est ignoré .
  • onlyMixOfAlphaNumeric«Il vérifie que la chaîne contient à la fois des lettres et des nombres de n'importe quel ordre de séquence.

Exemple:

function matchExpression( str ) {
    var rgularExp = {
        contains_alphaNumeric : /^(?!-)(?!.*-)[A-Za-z0-9-]+(?<!-)$/,
        containsNumber : /\d+/,
        containsAlphabet : /[a-zA-Z]/,

        onlyLetters : /^[A-Za-z]+$/,
        onlyNumbers : /^[0-9]+$/,
        onlyMixOfAlphaNumeric : /^([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*$/
    }

    var expMatch = {};
    expMatch.containsNumber = rgularExp.containsNumber.test(str);
    expMatch.containsAlphabet = rgularExp.containsAlphabet.test(str);
    expMatch.alphaNumeric = rgularExp.contains_alphaNumeric.test(str);

    expMatch.onlyNumbers = rgularExp.onlyNumbers.test(str);
    expMatch.onlyLetters = rgularExp.onlyLetters.test(str);
    expMatch.mixOfAlphaNumeric = rgularExp.onlyMixOfAlphaNumeric.test(str);

    return expMatch;
}

// HTML Element attribute's[id, name] with dynamic values.
var id1 = "Yash", id2="777", id3= "Yash777", id4= "Yash777Image4"
    id11= "image5.64", id22= "55-5.6", id33= "image_Yash", id44= "image-Yash"
    id12= "_-.";
console.log( "Only Letters:\n ", matchExpression(id1) );
console.log( "Only Numbers:\n ", matchExpression(id2) );
console.log( "Only Mix of Letters and Numbers:\n ", matchExpression(id3) );
console.log( "Only Mix of Letters and Numbers:\n ", matchExpression(id4) );

console.log( "Mixed with Special symbols" );
console.log( "Letters and Numbers :\n ", matchExpression(id11) );
console.log( "Numbers [-]:\n ", matchExpression(id22) );
console.log( "Letters :\n ", matchExpression(id33) );
console.log( "Letters [-]:\n ", matchExpression(id44) );

console.log( "Only Special symbols :\n ", matchExpression(id12) );

Production:

Only Letters:
  {containsNumber: false, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: true, mixOfAlphaNumeric: false}
Only Numbers:
  {containsNumber: true, containsAlphabet: false, alphaNumeric: true, onlyNumbers: true, onlyLetters: false, mixOfAlphaNumeric: false}
Only Mix of Letters and Numbers:
  {containsNumber: true, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: true}
Only Mix of Letters and Numbers:
  {containsNumber: true, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: true}
Mixed with Special symbols
Letters and Numbers :
  {containsNumber: true, containsAlphabet: true, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Numbers [-]:
  {containsNumber: true, containsAlphabet: false, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Letters :
  {containsNumber: false, containsAlphabet: true, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Letters [-]:
  {containsNumber: false, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Only Special symbols :
  {containsNumber: false, containsAlphabet: false, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}

java Correspondance de motifs avec des expressions régulières.


4

Pour tester si un caractère est un nombre, sans exagération❓, à adapter au besoin.

const s = "EMA618"

function hasInt(me){
  let i = 1,a = me.split(""),b = "",c = "";
  a.forEach(function(e){
   if (!isNaN(e)){
     console.log(`CONTAIN NUMBER «${e AT POSITION ${a.indexOf(e)} => TOTAL COUNT ${i}`)
     c += e
     i++
   } else {b += e}
  })
  console.log(`STRING IS «${b}», NUMBER IS «${c}»`)
  if (i === 0){
    return false
    // return b
  } else {
    return true
    // return +c
  }
}


hasInt(s)


2

Une façon de le vérifier consiste à parcourir la chaîne et à renvoyer true (ou false selon ce que vous voulez) lorsque vous frappez un nombre.

function checkStringForNumbers(input){
    let str = String(input);
    for( let i = 0; i < str.length; i++){
              console.log(str.charAt(i));
        if(!isNaN(str.charAt(i))){           //if the string is a number, do the following
            return true;
        }
    }
}

0

Vous pouvez le faire en utilisant javascript. Pas besoin de Jquery ou Regex

function isNumeric(n) {
  if(!isNaN(n))
    {
     return true
    }
  else
   {
    return false
   }
}

14
Overkill. Pourrait être justefunction isNumeric(n) { return !isNaN(n); }
Luca Steeb

Cela ne vérifie pas non plus si TOUT caractère est un nombre. Mais je peux penser à une solution inspirée de cela.
Tyler Lazenby

0

Ce code aide également à "Détecter les nombres dans une chaîne donnée" lorsque des nombres sont trouvés, il arrête son exécution.

function hasDigitFind(_str_) {
  this._code_ = 10;  /*When empty string found*/
  var _strArray = [];

  if (_str_ !== '' || _str_ !== undefined || _str_ !== null) {
    _strArray = _str_.split('');
    for(var i = 0; i < _strArray.length; i++) {
      if(!isNaN(parseInt(_strArray[i]))) {
        this._code_ = -1;
        break;
      } else {
        this._code_ = 1;
      }
    }

  }
  return this._code_;
}

0

parseInt fournit des nombres entiers lorsque la chaîne commence par la représentation d'un entier:

(parseInt '1a')  is  1

..alors peut être:

isInteger = (s)->
  s is (parseInt s).toString()  and  s isnt 'NaN'

(isInteger 'a') is false
(isInteger '1a') is false
(isInteger 'NaN') is false
(isInteger '-42') is true

Pardonnez mon CoffeeScript.


-1

Vous pouvez également essayer le lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.