Controlla se una stringa di input contiene un numero in javascript


137

Il mio obiettivo finale è convalidare un campo di input. L'input può essere alfabetico o numerico.


4
Non hai bisogno di jQuery per questo.
Šime Vidas,

Modifica il titolo della domanda in modo che sia più preciso come "input jQuery convalida solo caratteri alfabetici" poiché la descrizione non fornisce alcuna risposta su "come trovare i numeri in una stringa", pertanto risulta un risultato di ricerca irrilevante per la nostra comunità. Grazie!
Juanma Guerrero,

Modificato "jQuery" dal titolo della domanda e sostituito con "Javascript".
VKen,

@VKen, Non è necessario inserire tag nel titolo.
Starx,

@Starx ha osservato, sto solo mantenendo il formato con cui è iniziato il poster della domanda.
VKen,

Risposte:


289

Se non sbaglio, la domanda richiede "contiene numero", non "è numero". Così:

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

1
Esattamente quello di cui avevo bisogno. Grazie
AndyH,

questa soluzione non tiene conto di numeri non interi come 3.2 o 1e4
ekkis,

8
Lo fa. Check in console: hasNumber ("check 3.2 o 1e4") = true vs hasNumber ("check no numbers") = false. Perché 3.2 e 1e4 contengono numeri in sé.
Zon,

Perché questa risposta non è in cima?
Rakesh Nair,

Risponde esattamente alla domanda posta.
Zon,

109

Puoi farlo usando javascript. Non c'è bisogno di Jquery o Regex

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

Durante l'implementazione

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

Aggiornamento: per verificare se una stringa contiene numeri, è possibile utilizzare espressioni regolari per farlo

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

2
matches != nullsignifica no undefinedo nullmentre matches !== nullsignifica specificamente no nullma passa undefined.
Nate

match()restituisce un array o null. Quindi if (matches !== null)dovrebbe andare bene (e farà piacere a JSHint.) Fonte: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Jason

Dovrebbe essere isFinite(parseFloat(n))nel primo esempio. isNumeric("5,000")non riesce.
m.spyratos,

@ m.spyratos, Beh, isFinite() dà true se il valore passato è un finitenumero e il numero 5,000è una stringa formattata di numero non un numero finito.
Starx,

@Starx, sono d'accordo. Ma se non supportate la stringa formattata come input, allora perché utilizzate il float di analisi isNaN? Suggerirei di rimuovere il float di analisi daisNaN o di aggiungerlo a isFinitecome essere consistito.
m.spyratos,

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

Ho dovuto leggere l'intera domanda per rendermi conto che in realtà risponde esattamente alla domanda posta. Il titolo della domanda è un po 'ingannevole.
Nate

9

Non è assolutamente a prova di proiettile, ma ha funzionato per i miei scopi e forse aiuterà qualcuno.

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

Utilizzo delle espressioni regolari con JavaScript . Un'espressione regolare è una stringa di testo speciale per descrivere un modello di ricerca, che è scritto sotto forma di / pattern / modificatori in cui "pattern" è l'espressione regolare stessa e "modificatori" sono una serie di caratteri che indicano varie opzioni.
         La classe del personaggio è il concetto regex più elementare dopo una corrispondenza letterale. Fa in modo che una piccola sequenza di caratteri corrisponda a un insieme più ampio di caratteri. Ad esempio, potrebbe indicare l' [A-Z]alfabeto maiuscolo e \dpotrebbe indicare qualsiasi cifra.

Dal seguente esempio

  • contains_alphaNumeric«Controlla che la stringa contenga una lettera o un numero (o) sia una lettera che un numero. Il trattino (-) viene ignorato .
  • onlyMixOfAlphaNumeric«Controlla che la stringa contenga sia lettere che numeri solo di qualsiasi ordine di sequenza.

Esempio:

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

Produzione:

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 Pattern Matching con espressioni regolari.


4

Per verificare se un carattere è un numero, senza overkill❓, da adattare secondo necessità.

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

Un modo per verificarlo è quello di passare in rassegna la stringa e restituire true (o false in base a ciò che si desidera) quando si preme un numero.

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

Puoi farlo usando javascript. Non c'è bisogno di Jquery o Regex

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

14
Eccessivo. Potrebbe essere solofunction isNumeric(n) { return !isNaN(n); }
Luca Steeb il

Anche questo non controlla se QUALSIASI personaggio è un numero. Ma riesco a pensare a una soluzione ispirata da questo.
Tyler Lazenby,

0

Questo codice aiuta anche in "Rilevare numeri in una determinata stringa" quando i numeri rilevano ne interrompe l'esecuzione.

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 fornisce numeri interi quando la stringa inizia con la rappresentazione di un numero intero:

(parseInt '1a')  is  1

..so forse:

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

Perdonate il mio CoffeeScript.


-1

Puoi anche provare lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.