Regex para que coincida con los hashes md5

3 minutos de lectura

Qué tipo de expresión regular se debe usar para hacer coincidir un hash md5.

cómo validar este tipo de cadena 00236a2ae558018ed13b5222ef1bd987

Intenté algo como esto: ('/^[a-z0-9]/') pero no funcionó.

¿Cómo lograr esto? Gracias

  • Si recibe una cadena y desea validarla como md5, simplemente verifique la longitud 32 y los caracteres a-f0-9.

    – Dave Chen

    02/02/2014 a las 22:30

  • Por “validar”, ¿simplemente quiere decir que cualquier cadena de 32 caracteres que contenga solo dígitos hexadecimales válidos pasará?

    – Chris

    02/02/2014 a las 22:31

  • por ejemplo con [[:xdigit:]] y una repetición de {32} encerrado en marcadores de inicio y fin.

    – mario

    02/02/2014 a las 22:31


  • el f carta era el problema. Gracias

    – mwweb

    02/02/2014 a las 22:33

  • La simplicidad de la pregunta – La primer resultado de búsqueda en Google resulta ser un duplicado en este mismo sitio… como regla general: si obtiene una respuesta inmediata, probablemente no puso suficiente esfuerzo en la pregunta.

    – Emisario

    2 de febrero de 2014 a las 22:42

Avatar de usuario de Ryan
Ryan

Este es un PCRE que coincidirá con un hash MD5:

define('R_MD5_MATCH', '/^[a-f0-9]{32}$/i');

if(preg_match(R_MD5_MATCH, $input_string)) {
    echo "It matches.";
} else {
    echo "It does not match.";
}

  • Tenga cuidado con los hashes con literales en mayúsculas. Tanto mayúsculas como minúsculas son válidas por lo que eliminar una u otra no es correcto. La expresión regular probablemente debería verse así: '/^[a-fA-F0-9]{32}$/i'. Salud.

    – el.nicko

    12/06/2016 a las 10:40


  • @ el.nicko Estoy tratando de entender … ya que la expresión regular incluye i para mayúsculas y minúsculas, ¿por qué especificar ambos? a-f y A-F? ¿Tiene algún enlace para respaldar/ampliar su punto?

    – morloff

    13 de septiembre de 2016 a las 0:21


  • @el.nicko esto no importaría porque tiene el i modificador La razón por la que solo está el rango de minúsculas y no ambos es por el i modificador

    – Ryan

    13 de septiembre de 2016 a las 1:54


  • ACK, tienes un punto allí. En el contexto de la pregunta y la respuesta dada, es 100% correcto. Sin embargo, hay algunas configuraciones (por ejemplo, Java) donde el i no funcionará o al menos no como se esperaba, pero agregar mayúsculas y minúsculas funciona y mejora la legibilidad dependiendo de cómo se vea 🙂

    – el.nicko

    14/09/2016 a las 18:59


  • Estos son los PCRE. Cómo lo hace Java no es relevante. Las expresiones regulares no siempre son portátiles entre motores.

    – Ryan

    14/09/2016 a las 19:26

Tratar ctype_xdigit:

<?php

$hash="00236a2ae558018ed13b5222ef1bd987";

var_dump(strlen($hash) === 32 && ctype_xdigit($hash));

Producción: bool(true)

  • prefiero este en preg_match.

    – endo64

    19 de abril de 2018 a las 13:51

  • En realidad, también es más rápido que regex. También podría colocarse dentro de una función (p. ej., isHash(string $hash, int $longitud = 32), por un pequeño costo de sobrecarga de la llamada a la función. Incluso de esa manera probablemente sea aún más rápida que la expresión regular. Vale la pena señalar: coincide con cualquier 32- char cadena hexadecimal No hay forma de validar explícitamente md5.

    – x cero

    11 de mayo de 2018 a las 0:01


¿Ha sido útil esta solución?