Saltar al contenido

Cómo verificar si una cadena solo contiene dígitos / caracteres numéricos

Solución:

Aquí está:

#!/bin/bash
if [[ $1 =~ ^[0-9]+$ ]]
then
    echo "ok"
else
    echo "no"
fi

Imprime ok si el primer argumento contiene solo dígitos y no de lo contrario. Podrías llamarlo con: ./yourFileName.sh inputValue

[[ $myvar =~ [^[:digit:]] ]] || echo All Digits

O, si te gusta el if-then formulario:

if [[ $myvar =~ [^[:digit:]] ]]
then
    echo Has some nondigits
else
    echo all digits
fi

En tiempos antiguos, hubiéramos usado [0-9]. Estos formularios no son seguros para Unicode. El reemplazo moderno seguro para Unicode es [:digit:].

Si desea realizar la prueba de una manera compatible con POSIX, puede usar:

expr string : regex        ## returns length of string if both sides match

o

expr match string regex    ## behaves the same

Por ejemplo para probar si $myvar son todos los dígitos:

[ $(expr "x$myvar" : "x[0-9]*$") -gt 0 ] && echo "all digits"

Nota: 'x' antepuesto a la variable y la expresión para proteger contra la prueba de error de lanzamiento de cadena vacía. Usar el length devuelto por la prueba, no olvides restar 1 que representa el 'x'.

En if-then-else formulario, aquí hay un breve script que prueba si el primer argumento del script contiene todos los dígitos:

#!/bin/sh

len=$(expr "x$1" : "x[0-9]*$")  ## test returns length if $1 all digits
let len=len-1                   ## subtract 1 to compensate for 'x'

if [ $len -gt 0 ]; then         ## test if $len -gt 0 - if so, all digits
    printf "n '%s' : all digits, length: %d charsn" "$1" $len
else
    printf "n '%s' : containes characters other than [0-9]n" "$1"
fi

Salida de ejemplo

$ sh testdigits.sh 265891

 '265891' : all digits, length: 6 chars

$ sh testdigits.sh 265891t

 '265891t' : contains characters other than [0-9]

La prueba de expresión regular de bash [[ $var =~ ^[0-9]+$ ]] está bien, lo uso, pero es un bashismo (limitado al shell bash). Si le preocupa la portabilidad, la prueba POSIX funcionará en cualquier shell compatible con POSIX.

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


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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