Tengo una base de datos mssql en la cual mis claves principales son GUID. Estoy trabajando en una interfaz web para insertar algunos datos. Necesito un GUID, generado por php. Estoy usando la función com_create_guid()
. Entonces, antes de intentar insertar quiero asegurarme de que mis parámetros sean válidos. No puedo encontrar una manera de verificar si una cadena (com_create_guid()
devuelve cadena) es un GUID válido.php - compruebe si hay una guía válida
20
A
Respuesta
27
Considerando un GUID se define como algo parecido a esto: "A98C5A1E-A742-4808-96FA-6F409E799937" (de lo que dice la página de Wikipedia)
supongo usando una expresión regular como éste haría:
$guid = 'A98C5A1E-A742-4808-96FA-6F409E799937';
if (preg_match('/^\{?[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\}?$/', $guid)) {
var_dump('ok');
} else {
var_dump('not ok');
}
a las coincidencias de
- 8 caracteres (letras y números)
- 4 caracteres
- 4 caracteres
- 4 caracteres
- 12 caracteres
cada conjunto de caracteres separados por un '-
'
Teniendo en cuenta que está utilizando com_create_guid
, la la comprobación de expresiones regulares para las opciones }
y {
alrededor de la guía, lo que significa que esto también mostrará 'ok':
$guid = '{A98C5A1E-A742-4808-96FA-6F409E799937}';
if (preg_match('/^\{?[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\}?$/', $guid)) {
var_dump('ok');
} else {
var_dump('not ok');
}
36
Existen algunas reglas que deben imponerse en el patrón UUID/GUID.
- Las únicas letras válidas son a, b, c, d, ey f.
- 0-9 se puede reemplazar con el patrón de dígitos \ d
- Los GUID son a menudo insensibles a las mayúsculas y minúsculas.
- Tiene {dos corchetes} o ninguno.
patrones simplificado
- hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh
- {hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh}
Expresión:
var_dump(
preg_match("/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i", $guid)
? "ok", "not ok");
Traducción:
- / comienzo de la expresión
- ^ comienzo de cadena
- (\ {)? corchete de apertura opcional {
- [af \ d] {8} 8 caracteres hexadecimales hhhhhhhh
- (- [af \ d] {4}) caracteres 4 hexagonales procedió por dash -hhhh
- {4} patrón anterior repitió 4 veces
- [af \ d] {8} 8 caracteres hexadecimales hhhhhhhh
- (? (1) \}) si primer patrón estaba presente {, a continuación, coincide con cierre tag}
- $ final de la cadena
- / cerca expresión
- i ignorar mayúsculas y minúsculas
Cuestiones relacionadas
- 1. Ruby: compruebe si hay un puerto abierto
- 2. Compruebe si hay un módulo node.js disponible
- 3. MySql php: compruebe si Row existe
- 4. PDO/PHP - Compruebe si existe fila
- 5. Compruebe si hay cambios pendientes para guardar
- 6. columna Compruebe si hay un valor único
- 7. Compruebe si existe un directorio en PHP
- 8. compruebe si el archivo existe en php
- 9. Compruebe si existe un archivo/directorio: ¿hay una mejor manera?
- 10. Comprueba si la variable es una fecha válida con PHP
- 11. Pruebe si una expresión regular es válida en PHP
- 12. Compruebe si una cadena es una ruta válida de directorio (carpeta) de Windows
- 13. PHP: compruebe si object/array es una referencia
- 14. Compruebe si una cadena termina con un número en PHP
- 15. Compruebe si una matriz está vacía
- 16. Compruebe si existe una inclusión (o requiere)
- 17. ¿Hay una guía del usuario de vsVim?
- 18. compruebe si una cadena es una URL
- 19. ¿Hay una guía visual de System.Windows.SystemColors?
- 20. Compruebe si una cadena es válida UTF-8 codificada en Java
- 21. Django: compruebe si existe una imagen en alguna url particular
- 22. jQuery: compruebe si existe imagen
- 23. ¿Existe una guía entretenida?
- 24. Compruebe si una variable es una matriz
- 25. Compruebe si una cadena contiene una subcadena
- 26. PHP compruebe si la solicitud entrante es tipo JSON
- 27. C++ comprobar si una fecha es válida
- 28. Compruebe si existe tabla
- 29. Compruebe si "exec" está deshabilitado
- 30. PHP exec: compruebe si está habilitado o deshabilitado
la expresión regular se puede simplificar: [A-Z0-9] {8 } - (?: [A-Z0-9] {4} -) {3} [A-Z0-9] {12} –
se puede hacer más corto de lo que propuse, de hecho :-) Pero creo que ' Todavía sigo con la versión "larga", que es "más simple/más rápida" para entender cuándo tiene que leerla, no lo hará nge mucho, pero tanto como regex son una herramienta poderosa, a menudo son difíciles de entender para aquellos que no los conocen bien ... –
¿Los GUID no son hexadecimales? Entonces, ¿por qué combinar en A-Z en lugar de A-F? ¿O me estoy perdiendo algo aquí? – kander