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
X
y 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.