Saltar al contenido

Valores decimales o numéricos en la validación de expresiones regulares

Nuestro team redactor ha estado mucho tiempo investigando soluciones a tus preguntas, te regalamos la respuestas y nuestro deseo es servirte de mucha apoyo.

Solución:

Un dígito en el rango del 1 al 9 seguido de cero o más dígitos:

^[1-9]d*$

Para permitir números con un punto decimal opcional seguido de dígitos. Un dígito en el rango de 1 a 9 seguido de cero o más dígitos y, opcionalmente, seguido de un punto decimal seguido de al menos 1 dígito:

^[1-9]d*(.d+)?$

Notas:

  • los ^ y $ anclar al principio y al final básicamente diciendo que todo el string debe coincidir con el patrón

  • ()? coincide con 0 o 1 de todo entre paréntesis

Actualización para manejar comas:

En expresiones regulares . tiene un significado especial: coincide con cualquier carácter. Para coincidir literalmente con un . en un string necesitas escapar los . utilizando . Este es el significado de la . en la expresión regular de arriba. Entonces, si desea usar una coma en su lugar, el patrón es simplemente:

^[1-9]d*(,d+)?$

Actualización adicional para manejar comas y puntos

Si quiere permitir un . entre grupos de dígitos y un , entre las partes integral y fraccionaria, luego intente:

^[1-9]d0,2(.d3)*(,d+)?$

es decir, este es un dígito en el rango 1-9 seguido de hasta otros 2 dígitos, luego cero o más grupos de un punto seguido de 3 dígitos y, opcionalmente, su coma y dígitos como antes.

Si quiere permitir un . en cualquier lugar entre los dígitos y luego intente:

^[1-9][.d]*(,d+)?$

es decir, un dígito del 1 al 9 seguido de cero o más dígitos o puntos completos seguidos opcionalmente de una coma y uno o más dígitos.

En realidad, ninguna de las respuestas dadas cubre completamente la solicitud.
Como el OP no proporcionó un caso de uso específico o tipos de números, intentaré cubrir todos los casos y permutaciones posibles.

Números regulares

Totalmente positivo

Este número generalmente se llama entero sin signo, pero también puede llamarlo un número positivo no fraccionario, incluya cero. Esto incluye números como 0, 1 y 99999.
La expresión regular que cubre esta validación es:

/^(0|[1-9]d*)$/

Prueba esta expresión regular

Totalmente positivo y negativo

Este número generalmente se llama entero con signo, pero también puede llamarlo un número no fraccionario. Esto incluye números como 0, 1, 99999, -99999, -1 y -0.
La expresión regular que cubre esta validación es:

/^-?(0|[1-9]d*)$/

Prueba esta expresión regular

Como probablemente haya notado, también he incluido -0 como un número válido. Pero, algunos pueden discutir con este uso y decir que este no es un número real (puede leer más sobre Signed Zero aquí). Entonces, si desea excluir este número de esta expresión regular, esto es lo que debe usar en su lugar:

/^-?(0|[1-9]d*)(?

Prueba esta expresión regular

Todo lo que he agregado es (?, lo que significa no incluir -0 antes de esta afirmación. Esta (? afirmación llamada mirada atrás negativa, lo que significa que cualquier frase reemplaza al ... no debe aparecer antes de esta afirmación. Lookbehind tiene limitaciones, como que la frase no puede incluir cuantificadores. Es por eso que en algunos casos usaré Lookahead en su lugar, que es lo mismo, pero al revés.

Muchos tipos de expresiones regulares, incluidos los utilizados por Perl y Python, solo permiten cadenas de longitud fija. Puede utilizar texto literal, caracteres de escape, caracteres de escape Unicode que no sean Xy clases de personajes. No puede utilizar cuantificadores ni referencias inversas. Puede utilizar la alternancia, pero solo si todas las alternativas tienen la misma longitud. Estos sabores evalúan mirar atrás dando un paso atrás a través del tema. string para tantos caracteres como necesite el lookbehind, y luego intentar la expresión regular dentro del lookbehind de izquierda a derecha.

Puede leer más sobre las afirmaciones de Lookaround aquí.

Números fraccionarios

Positivo

Este número generalmente se llama flotador sin firmar o doble sin firmar, pero también puede llamarlo un número fraccionario positivo, incluya cero. Esto incluye números como 0, 1, 0.0, 0.1, 1.0, 99999.000001, 5.10.
La expresión regular que cubre esta validación es:

/^(0|[1-9]d*)(.d+)?$/

Prueba esta expresión regular

Algunos pueden decir que números como .1, .0 y .00651 (igual que 0.1, 0.0 y 0.00651 respectivamente) también son números fraccionarios válidos, y no puedo estar en desacuerdo con ellos. Así que aquí hay una expresión regular que además es compatible con este formato:

/^(0|[1-9]d*)?(.d+)?(?<=d)$/

Prueba esta expresión regular

Negativo y positivo

Este número generalmente se llama flotador firmado o doble firmado, pero también puede llamarlo un número fraccionario. Esto incluye números como 0, 1, 0.0, 0.1, 1.0, 99999.000001, 5.10, -0, -1, -0.0, -0.1, -99999.000001, 5.10.
La expresión regular que cubre esta validación es:

/^-?(0|[1-9]d*)(.d+)?$/

Prueba esta expresión regular

Para no -0 creyentes:

/^(?!-0(.0+)?$)-?(0|[1-9]d*)(.d+)?$/

Prueba esta expresión regular

Para aquellos que quieran apoyar también las representaciones de cero invisibles, como .1, -.1, use la siguiente expresión regular:

/^-?(0|[1-9]d*)?(.d+)?(?<=d)$/

Prueba esta expresión regular

La combinación de no -0 creyentes y creyentes cero invisibles, use esta expresión regular:

/^(?!-0?(.0+)?$)-?(0|[1-9]d*)?(.d+)?(?<=d)$/

Prueba esta expresión regular

Números con notación científica (también conocida como notación exponencial)

Algunos pueden querer apoyar en sus validaciones, números con carácter científico. e, que es por cierto, un número absolutamente válido, se crea para representar en breve números muy largos. Puede leer más sobre la notación científica aquí. Estos números suelen parecerse a 1e3 (cual es 1000), 1e-3 (que es 0.001) y son totalmente compatibles con muchos de los principales lenguajes de programación (por ejemplo, JavaScript). Puede probarlo comprobando si la expresión '1e3'==1000 devoluciones true.
Dividiré el soporte para todas las secciones anteriores, incluidos los números con notación científica.

Números regulares

Validación de expresiones regulares de números enteros positivos, admite números como 6e4, 16e-10, 0e0 pero también números regulares como 0, 11:

/^(0|[1-9]d*)(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

Validación de expresiones regulares de números enteros positivos y negativos, admite números como -6e4, -16e-10, -0e0 pero también números regulares como -0, -11 y todos los números enteros positivos anteriores:

/^-?(0|[1-9]d*)(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

Validación de expresiones regulares numéricas positivas y negativas para no -0 creyentes, igual que el anterior, excepto que ahora prohíbe números como -0, -0e0, -0e5 y -0e-6:

/^(?!-0)-?(0|[1-9]d*)(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

Números fraccionarios

Validación de expresiones regulares numéricas positivas, también admite los números enteros anteriores, más números como 0.1e3, 56.0e-3, 0.0e10 y 1.010e0:

/^(0|[1-9]d*)(.d+)?(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

Número positivo con validación de expresiones regulares de soporte cero invisible, también admite los números positivos anteriores, además de números como .1e3, .0e0, .0e-5 y .1e-7:

/^(0|[1-9]d*)?(.d+)?(?<=d)(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

La validación de expresiones regulares numéricas negativas y positivas, admite los números positivos anteriores, pero también números como -0e3, -0.1e0, -56.0e-3 y -0.0e10:

/^-?(0|[1-9]d*)(.d+)?(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

Validación de expresiones regulares numéricas negativas y positivas para no -0 creyentes, igual que el anterior, excepto que ahora prohíbe números como -0, -0.00000, -0.0e0, -0.00000e5 y -0e-6:

/^(?!-0(.0+)?(e|$))-?(0|[1-9]d*)(.d+)?(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

Número negativo y positivo con validación de expresiones regulares de soporte cero invisible, admite también los números positivos y negativos anteriores, además de números como -.1e3, -.0e0, -.0e-5 y -.1e-7:

/^-?(0|[1-9]d*)?(.d+)?(?<=d)(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

Número negativo y positivo con la combinación de no -0 creyentes y creyentes cero invisibles, igual que el anterior, pero prohíbe números como -.0e0, -.0000e15 y -.0e-19:

/^(?!-0?(.0+)?(e|$))-?(0|[1-9]d*)?(.d+)?(?<=d)(e-?(0|[1-9]d*))?$/i

Prueba esta expresión regular

Números con representación hexadecimal

En muchos lenguajes de programación, string representación de un número hexadecimal como 0x4F7A se puede convertir fácilmente a un número decimal 20346.
Por lo tanto, es posible que desee respaldarlo en su secuencia de comandos de validación.
La siguiente expresión regular solo admite representaciones de números hexadecimales:

/^0x[0-9a-f]+$/i

Prueba esta expresión regular

Todas las permutaciones

Estas expresiones regulares finales, admiten los números cero invisibles.

Cero creyentes firmados

/^(-?(0|[1-9]d*)?(.d+)?(?<=d)(e-?(0|[1-9]d*))?|0x[0-9a-f]+)$/i

Prueba esta expresión regular

Cero creyentes no firmados

/^((?!-0?(.0+)?(e|$))-?(0|[1-9]d*)?(.d+)?(?<=d)(e-?(0|[1-9]d*))?|0x[0-9a-f]+)$/i

Prueba esta expresión regular

Espero haber cubierto todas las permutaciones numéricas que son compatibles con muchos lenguajes de programación.
¡Buena suerte!


Oh, olvidé mencionar, que aquellos que quieran validar un número incluye un separador de mil, deben limpiar todas las comas (,) primero, como puede haber cualquier tipo de separador, no puede cubrirlos todos.
Pero puede eliminarlos primero, antes de la validación del número:

//JavaScript
function clearSeparators(number)

    return number.replace(/,/g,'');


Publicación similar en mi blog.

Tuve el mismo problema, pero también quería que ".25" fuera un número decimal válido. Aquí está mi solución usando JavaScript:

function isNumber(v) 
  // [0-9]* Zero or more digits between 0 and 9  (This allows .25 to be considered valid.)
  // ()? Matches 0 or 1 things in the parentheses.  (Allows for an optional decimal point)
  // Decimal point escaped with .
  // If a decimal point does exist, it must be followed by 1 or more digits [0-9]
  // d and [0-9] are equivalent 
  // ^ and $ anchor the endpoints so tthe whole string must match.
  return v.trim().length > 0 && v.trim().match(/^[0-9]*(.[0-9]+)?$/);

Dónde está mi método trim ()

String.prototype.trim = function() 
  return this.replace(/(^s*;

Matthew DesVoigne

Comentarios y puntuaciones del artículo

Puedes añadir valor a nuestro contenido informacional aportando tu experiencia en las acotaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología