Ho un database mssql in cui le mie chiavi primarie sono GUID. Sto lavorando su un'interfaccia web per l'inserimento di alcuni dati. Ho bisogno di un GUID, generato da php. Sto usando la funzione com_create_guid()
. Quindi, prima di provare a inserire voglio assicurarmi che i miei parametri siano validi. Non riesco a trovare un modo per verificare se una stringa (com_create_guid()
restituisce stringa) è un GUID valido.php - verificare la guida valida
20
A
risposta
27
Considerando un GUID è definito come qualcosa di simile: "A98C5A1E-A742-4808-96FA-6F409E799937" (da ciò che la pagina di wikipedia dice)
suppongo utilizzando un'espressione regolare come questo farebbe:
$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');
}
Si abbinerà per
- 8 caratteri (sia lettere che numeri)
- 4 caratteri
- 4 caratteri
- 4 caratteri
- 12 caratteri
ogni set di caratteri di essere separati da un '-
'
Considerando che si sta utilizzando com_create_guid
, il controllo regex per gli optionals }
e {
intorno al guid, il che significa che potrebbe visualizzare anche '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
Ci sono alcune regole che dovrebbero essere imposte sul pattern UUID/GUID.
- Le sole lettere valide sono a, b, c, d, e, e f.
- 0-9 può essere sostituito con il modello di cifre \ d
- I GUID sono spesso senza distinzione tra maiuscole e minuscole.
- Si dispone di {entrambe parentesi} o del tutto assenti.
modelli semplificato
- hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh
- {hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh}
Espressione:
var_dump(
preg_match("/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i", $guid)
? "ok", "not ok");
Traduzione:
- / inizio di espressione
- ^ inizio della stringa
- (\ {)? parentesi aperta opzionale {
- [af \ d] {8} 8 caratteri esadecimali hhhhhhhh
- (- [af \ d] {4}) caratteri esadecimali 4 preceduto da cruscotto -hhhh
- {4} modello precedente ripetuto 4 volte
- [af \ d] {8} 8 caratteri esadecimali hhhhhhhh
- (? (1) \}) se il primo modello era presente {, quindi corrisponde chiusura tag}
- $ fine della stringa
- / vicino espressione
- i ignorare caso sensibilità
Problemi correlati
- 1. Verificare se un'espressione regolare è valida in PHP
- 2. AIR, Flex - come verificare se la regex è valida
- 3. Verificare se la stringa UTF-8 è valida in Qt
- 4. Guida di MAMP Config, visualizza errori PHP
- 5. comprensione Bloccare la guida?
- 6. Guida introduttiva a SAML e PHP
- 7. Guida introduttiva allo sviluppo di estensioni PHP
- 8. Come verificare se un file è un'immagine valida?
- 9. Qual è il modo migliore e più veloce per verificare se l'immagine è valida in PHP?
- 10. Apache, PHP Lunghezza del contenuto non valida
- 11. Come verificare la connessione FTP?
- 12. Come verificare se una sessione non è valida
- 13. Ruby: come verificare se una stringa è valida?
- 14. In python, come verificare se una data è valida?
- 15. Come verificare che una stringa uri sia valida
- 16. Come verificare se un array di byte è un'immagine valida?
- 17. Verificare che un'espressione cron sia valida in Java
- 18. Come verificare se una variabile enum è valida?
- 19. Come verificare se la voce mysql è vuota in PhP?
- 20. Algoritmo della lotteria - PHP - la matematica sembra buona, ma la funzione è valida?
- 21. yii2 - Come risolvere la richiesta non valida (n. 400) Impossibile verificare l'invio dei dati?
- 22. Esiste una guida divertente?
- 23. Guida PHP con ripristino della password e scadenza del token
- 24. Conversione di una guida in Guida Nullable
- 25. PHP Attenzione: avvio di PHP: libreria non valida (forse non una libreria PHP)
- 26. Quanto è superato "HTTP: la guida definitiva"?
- 27. Linee guida per la codifica + Best practice?
- 28. La migliore guida disponibile per Sencha?
- 29. Convalida guida
- 30. codice c per la maschera di rete valida
l'espressione regolare può essere semplificata: [A-Z0-9] {8 } - (?: [A-Z0-9] {4} -) {3} [A-Z0-9] {12} –
può essere reso più breve di quello che ho proposto, anzi :-) Ma penso che io ' d ancora andare con la versione "lunga", che è "più semplice/più veloce" per capire quando devi leggerlo - non sarà cha molto, ma tanto quanto le regex sono uno strumento potente, sono spesso difficili da capire per coloro che non li conoscono bene ... –
I GUID non sono esadecimali? Quindi, perché abbinare su A-Z invece di A-F? O mi sto perdendo qualcosa qui? – kander