Compruebe si una cadena de entrada contiene un número en javascript


137

Mi objetivo final es validar un campo de entrada. La entrada puede ser alfabética o numérica.


44
No necesitas jQuery para eso.
Šime Vidas

Edite el título de su pregunta, para algo más preciso como "jQuery input valida solo caracteres alfabéticos" ya que su descripción no lleva a ninguna respuesta sobre "cómo encontrar números en una cadena", por lo tanto, resulta en un resultado de búsqueda irrelevante para nuestra comunidad. ¡Gracias!
Juanma Guerrero

Se editó "jQuery" fuera del título de la pregunta y se reemplazó con "Javascript".
VKen

@VKen, no es necesario poner etiquetas en el título.
Starx

@Starx notó, solo mantengo el formato con el que comenzó el póster de la pregunta.
VKen

Respuestas:


289

Si no me equivoco, la pregunta requiere "contiene número", no "es número". Entonces:

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

1
Exactamente lo que necesitaba. Gracias
AndyH

esta solución no tiene en cuenta números no enteros como 3.2 o 1e4
ekkis

8
Lo hace. Check in console: hasNumber ("check 3.2 or 1e4") = true vs hasNumber ("check no numbers") = false. Porque 3.2 y 1e4 contienen números en sí mismos.
Zon

¿Por qué esta respuesta no está en la parte superior?
Rakesh Nair

Responde exactamente la pregunta formulada.
Zon

109

Puedes hacer esto usando javascript. No hay necesidad de Jquery o Regex

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

Mientras implementa

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

Actualización: para verificar si una cadena tiene números, puede usar expresiones regulares para hacer eso

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

2
matches != nullsignifica no undefinedo nullwhile matches !== nullsignifica específicamente no nullpero pasa undefined.
Nate

match()devuelve una matriz o null. Entonces if (matches !== null)debería estar bien (y complacerá a JSHint.) Fuente: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Jason

Debería estar isFinite(parseFloat(n))en el primer ejemplo. isNumeric("5,000")falla
m.spyratos

@ m.spyratos, Bueno, isFinite()da verdadero si el valor pasado es un finitenúmero y el número 5,000es una cadena de número formateada, no un número finito.
Starx

@Starx, estoy de acuerdo. Pero si no admite una cadena formateada como entrada, ¿por qué usa parse float in isNaN? Sugeriría eliminar el flotador de análisis isNaNo agregarlo también para isFiniteque sea consistente.
m.spyratos

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

Tuve que leer toda la pregunta para darme cuenta de que esto realmente responde a la pregunta exacta formulada. El título de la pregunta es un poco engañoso.
Nate

9

No es a prueba de balas de ninguna manera, pero funcionó para mis propósitos y tal vez ayudará a alguien.

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

Usar expresiones regulares con JavaScript . Una expresión regular es una cadena de texto especial para describir un patrón de búsqueda, que se escribe en forma de / patrón / modificadores donde "patrón" es la expresión regular en sí misma, y ​​los "modificadores" son una serie de caracteres que indican varias opciones.
         La clase de caracteres es el concepto de expresión regular más básico después de una coincidencia literal. Hace que una pequeña secuencia de caracteres coincida con un conjunto de caracteres más grande. Por ejemplo, [A-Z]podría representar el alfabeto en mayúsculas y\d podría significar cualquier dígito.

De abajo ejemplo

  • contains_alphaNumeric«Comprueba que la cadena contenga letra o número (o) letra y número. El guión (-) se ignora .
  • onlyMixOfAlphaNumeric«Comprueba que la cadena contenga letras y números solo de cualquier orden de secuencia.

Ejemplo:

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

Fuera puesto:

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 expresiones regulares.


4

Para probar si algún carácter es un número, sin exagerar, para adaptarlo según sea necesario.

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

Una forma de verificarlo es recorrer la cadena y devolver verdadero (o falso, según lo que desee) cuando toca un número.

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

Puedes hacer esto usando javascript. No hay necesidad de Jquery o Regex

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

14
Exceso Podría ser justofunction isNumeric(n) { return !isNaN(n); }
Luca Steeb

Esto tampoco verifica si CUALQUIER carácter es un número. Pero puedo pensar en una solución inspirada en esto.
Tyler Lazenby el

0

Este código también ayuda en "Para detectar números en una cadena dada" cuando los números encuentran que detiene su ejecución.

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 proporciona enteros cuando la cadena comienza con la representación de un entero:

(parseInt '1a')  is  1

..así que tal vez:

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

Disculpe mi CoffeeScript.


-1

También puedes probar lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.