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.