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.

Udara SS Liyanage
fuente
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);
}
Zon
fuente
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');
}
Starx
fuente
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.');      
}
Jishnu AP
fuente
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.");
 }
Elon Zito
fuente
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.

Yash
fuente
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)

NVRM
fuente
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;
        }
    }
}
Herbert Su
fuente
0

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

function isNumeric(n) {
  if(!isNaN(n))
    {
     return true
    }
  else
   {
    return false
   }
}
usuario2164619
fuente
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_;
}
Khan Usama
fuente
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.

Neil Stockbridge
fuente
-1

También puedes probar lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Darex1991
fuente