javascript

Expresión regular para probar si un número es hexadecimal en JavaScript

Probar si una cadena es un número hexadecimal con JavaScript usando expresiones regulares

Actualmente estoy trabajando en una pequeñísima app que te dice cómo convertir manualmente un número hexadecimal a decimal.

Es decir, tú pones el número hexadecimal y la app lo convierte, pero te explica cómo hacerlo: pone todas las operaciones y cómo debes ir elevando el número, luego sumarlo y esas cosas que puede hacer un profesor (aunque la app no se cansa nunca).

Probar si es hexadecimal en JavaScript

Pero bueno, no vamos a desviarnos. Para que funcione más o menos bien se tiene que validar el número, y veremos cómo hacerlo con expresiones regulares.

La expresión regular

Sin más rodeos, la expresión es esta:

^[0-9A-F]+$

Voy a explicarla más o menos, aunque es muy sencilla. Primero vemos los delimitadores ^ y $, esos marcan respectivamente el inicio y fin de una cadena. Así le indicamos que no debe haber nada más, toda la expresión regular se debe cumplir de cabo a rabo dijeran por ahí.

Luego tenemos un mmm ¿rango? no sé cómo llamarlo, pero se representa con los corchetes. Y dice que puede tener números del 0 al 9, y de la A a la F.

Puede que haya alguien que diga que los números también pueden tener minúsculas, y tendrá razón. Pero eso de las mayúsculas y minúsculas lo arreglamos al probar la expresión regular, indicando que sea insensitivo; o convirtiendo todo a minúsculas.

Ah, finalmente usamos el signo de +. Ese símbolo quiere decir que lo que está antes de él debe estar 1 o más veces (infinitas si queremos). Así que en resumen…

Busca si una cadena está compuesta de 1 o más símbolos que van del 0 al 9 y de la A a la F.

Cómo implementarlo y ponerlo dentro de una función

Para no complicarnos, pondremos esto en una función que te regresa true o false indicando si el número es o no hexadecimal. El único argumento que acepta es una cadena, la cual representa el número.

/**
 * 
 * Comprobar si una cadena es un número hexadecimal usando
 * expresiones regulares
 * @author parzibyte
 * Visita: parzibyte.me
 */ 
const esHexadecimal = numeroHexadecimal => /^[0-9A-F]+$/ig.test(numeroHexadecimal);

La función se ve corta porque estamos usando funciones flecha. Si no sabes qué es const, mira esto.

En caso de que realmente no entiendas la función por la nueva sintaxis, el buen BabelJS nos ayuda y traduce a esto:

"use strict";
 
/**
 *
 * Comprobar si una cadena es un número hexadecimal usando
 * expresiones regulares
 * @author parzibyte
 * Visita: parzibyte.me
 */ 
var esHexadecimal = function esHexadecimal(numeroHexadecimal) {
  return /^[0-9A-F]+$/gi.test(numeroHexadecimal);
};

Explicando un poco ya el cuerpo de la función, nos topamos con que llamamos al método test de una expresión regular. Este método regresa un booleano y le pasamos una cadena.

Ahí se ve claramente que estamos indicando que no le debe importar si es mayúscula o minúscula con el modificador i.

Por otro lado, el modificador g es para que busque en toda la cadena y no se detenga en la primera coincidencia.

Para llamarla usamos:

let resultado = esHexadecimal("tu_numero_hexadecimal");

Y la variable resultado será true si lo es, false si no. Aquí una pequeña prueba:

/**
 * 
 * Comprobar si una cadena es un número hexadecimal usando
 * expresiones regulares
 * @author parzibyte
 * Visita: parzibyte.me
 */ 
const esHexadecimal = numeroHexadecimal => /^[0-9A-F]+$/ig.test(numeroHexadecimal);
 
const cadenasParaProbar = [
    "asd",
    "AAA",
    "fff",
    "affffabbc",
    "abcdef",
    "000000",
    "a",
    "parzibyte",
    "z",
    "001090",
    "qwe",
    "",
];
 
cadenasParaProbar.forEach(cadena => {
    console.log("Probando %s. ¿Es hexadecimal? %s", cadena, esHexadecimal(cadena));
});

Como es JavaScript al final de todo, se puede ejecutar en el navegador o sobre NodeJS.

Bonus: números hexadecimales

Tal vez llegaste aquí buscando cómo validar números hexadecimales; recordemos que estos números se componen de 6 caracteres, ni más ni menos (aunque creo que se pueden de 3 dígitos, pero validaremos hasta 6).

Entonces modificaríamos la expresión regular así:

^[0-9A-F]{6}$

En lugar del signo de + usamos a {6} que indica que forzosamente debe tener 6 de esos símbolos; ni más ni menos.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.