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).
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.
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.
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.
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.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.
Ver comentarios
Muchas gracias me ha resultado muy útil esta información.
Saludos
Jose