¿Cómo juzgar que una cadena es de tipo UUID? [duplicate]

3 minutos de lectura

En mi proyecto, uso UUID.fromString() para convertir cadena a UUIDpero si la cadena no es UUID tipo, arrojará exceptionentonces, ¿cómo puedo validar esta cadena?

  • Pruebe stackoverflow.com/questions/18724750/… – puede ser justo lo que está buscando.

    – Ewald

    18 de noviembre de 2013 a las 5:58

  • Posible duplicado de: stackoverflow.com/questions/7905929/how-to-test-valid-uuid-guid

    – Masudul

    18 de noviembre de 2013 a las 5:59

  • Agregué un validador UUID a Apache Commons Validator. Todavía no se ha fusionado, pero puedes votar por él aquí: github.com/apache/commons-validator/pull/68

    – Daniel Heid

    7 de enero a las 9:18


Maneje la excepción y haga algo en ese caso. Por ejemplo :

try{
    UUID uuid = UUID.fromString(someUUID);
    //do something
} catch (IllegalArgumentException exception){
    //handle the case where string is not valid UUID 
}

  • Puede que no sea excepcional tener datos que contengan UUID y otros elementos. Las excepciones deben ser excepcionales, no rutinarias; no use excepciones para el control de flujo. Existen una serie de razones para esto.

    – erickson

    18 de noviembre de 2013 a las 15:36

  • Es razonable manejarlo allí si, en el contexto de su aplicación, espera tener un UUID y sería excepcional que la cadena tuviera un formato no válido. Por otro lado, si su aplicación es un analizador y la gramática acepta UUID e identificadores de otros tipos en una alternativa particular, probar el formato de esta manera sería inapropiado.

    – erickson

    18 de noviembre de 2013 a las 17:15

  • ¡Esto no funcionaría! Me encontré con un problema en el que someUUID es “1-1-1-1-1” pero UUID.formString (“1-1-1-1-1”) devolvió “00000001-0001-0001-0001-000000000001”, básicamente se convierte en una representación UUID. necesitas usar expresiones regulares como Pattern p = Pattern.compile("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"); y entonces p.matcher(uuidString).matches();

    – mkilic

    23 de marzo de 2016 a las 15:06


  • Tenga en cuenta que esto no funciona para Java 8. Consulte aquí bugs.java.com/view_bug.do?bug_id=8159339 . Como alternativa, puede utilizar “UUID.fromString(uuid).toString().equals(uuid)”

    – ampolla

    8 de agosto de 2018 a las 11:57

  • @mkilic Suena como un error en el JDK. También apesta que no tenemos UUID.tryParse(String value) o similar.

    – josh m.

    4 de enero de 2019 a las 14:11

avatar de usuario
Imrán

Debe usar expresiones regulares para verificarlo, por ejemplo:

^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$

pruebalo con huevo 01234567-9ABC-DEF0-1234-56789ABCDEF0

o con corchetes

^\{?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}‌​\}?$

  • Solo tiro mis 2 centavos aquí, ya que vi la otra respuesta con 35 votos a favor. La gente debería usar este si esas son las 2 opciones. Principalmente porque descubrí que el JDK que estaba usando simplemente lanzaba la excepción basada en esta trivia si -> String[] var1 = var0.split("-"); if (var1.length != 5) { throw new IllegalArgumentException("Invalid UUID string: " + var0); }

    – Víctor

    9 de marzo de 2018 a las 19:02


  • stackoverflow.com/questions/18724750/…

    – Víctor

    9 de marzo de 2018 a las 22:15

  • La segunda expresión regular anterior que permite corchetes tiene un problema. Considera válido un UUID con solo una llave de apertura o cierre, por ejemplo: {77921671-41fa-4f61-83ea-5d60b76a264e

    – Martín Picker

    4 de octubre de 2018 a las 12:44

  • Esto es mucho más propenso a romperse, y mucho más detallado e innecesario que un simple intento/captura para analizar el UUID como en otra respuesta aquí.

    – josh m.

    4 de enero de 2019 a las 14:10

  • Puede condensar la redundancia de los grupos de longitud {4} envolviéndolos en un grupo sin captura con un cuantificador {3}. Por ejemplo (^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$)

    – TomPlum

    15 de noviembre de 2019 a las 9:37

¿Ha sido útil esta solución?