J'ai une base de données mssql dans laquelle mes clés primaires sont des GUID. Je travaille sur une interface web pour l'insertion de certaines données. J'ai besoin d'un GUID, généré par php. J'utilise la fonction com_create_guid()
. Donc, avant d'essayer d'insérer je veux m'assurer que mes paramètres sont valides. Je ne peux pas trouver un moyen de vérifier si une chaîne (com_create_guid()
renvoie une chaîne) est un GUID valide.php - vérifie la validité du guid
20
A
Répondre
27
Considérant un GUID est défini comme quelque chose comme ceci: "A98C5A1E-A742-4808-96FA-6F409E799937" (de ce que la page wikipedia dit)
Je suppose que l'aide d'un regex comme celui-ci ferait:
$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');
}
Il correspondra à
- 8 caractères (lettres et chiffres)
- 4 caractères
- 4 caractères
- 4 caractères
- 12 caractères
Chaque ensemble de caractères étant séparés par un '-
'
Considérant que vous utilisez com_create_guid
, la regex vérifier les optionnels }
et {
autour du guid, ce qui signifie que cela affichera aussi '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
Il existe quelques règles qui devraient être imposées sur le modèle UUID/GUID.
- Les seules lettres valides sont a, b, c, d, e et f.
- 0-9 peut être remplacé par le modèle de chiffres \ d
- Les GUID sont souvent insensibles à la casse.
- Vous avez {les deux parenthèses}, ou pas du tout.
modèles simplifiés
- hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh
- {hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh}
Expression:
var_dump(
preg_match("/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i", $guid)
? "ok", "not ok");
Traduction:
- / début d'expression
- ^ début de la chaîne
- (\ {)? support d'ouverture optionnelle {
- [af \ d] {8} 8 caractères hexadécimaux hhhhhhhh
- (- [af \ d] {4}) 4 caractères hexadécimaux passe par dash -hhhh
- {4} motif précédent répété 4 fois
- [af \ d] {8} 8 caractères hexadécimaux hhhhhhhh
- (? (1) \}) si premier motif était présent {, correspondent alors fermeture tag}
- $ fin de la chaîne
- / expression proche
- i ignore la casse
Questions connexes
- 1. xml validité, ajax et php
- 2. Comment trouver la validité du hashcode?
- 3. Vérification de la validité du numéro de version avec Perl
- 4. PHP vérifie si la requête entrante est de type JSON
- 5. Conteneur qui vérifie l'unicité du contenu
- 6. Le serveur SQL vérifie-t-il le GUID en double lors de l'insertion?
- 7. Git/gitose: Comment vérifier la validité du nom d'utilisateur et du courrier électronique?
- 8. Le formatage css affecte-t-il la validité des formulaires
- 9. Entity Framework - Utilisation du GUID comme condition
- 10. Sql Server 2005 - Retour du GUID du SP
- 11. Récupération du contact et du GUID de l'entreprise depuis ACT!
- 12. First & Follow Sets vérifie la grammaire simple
- 13. JSTL: vérifie si la propriété n'existe pas
- 14. L'application vérifie l'application de la licence?
- 15. Nullable GUID
- 16. http vérifie python
- 17. Le CRC vérifie les fichiers
- 18. Trouver GUID dans la base de données
- 19. SQL Server: Éviter la régénération du GUID lors de la restauration?
- 20. tests unitaires avec vérifie simulacres
- 21. Test à l'aide d'un guid ... comment définir la variable sur un Guid?
- 22. Initialisation d'une variable GUID
- 23. GUID semblable à YouTube
- 24. CruiseControl avec VSS - vérifie tous les fichiers
- 25. Comment définir la propriété à Guid dans la page ASPX
- 26. Quelle est la durée de vie et la validité des itérateurs C++?
- 27. guid Création d'une clé primaire pour la requête la plus rapide sélectionnez où guid (guid1, guid2, guid3 ...)
- 28. Quelle est la longueur de chaîne d'un GUID?
- 29. Convertir la chaîne en GUID dans Actionscript 3
- 30. C# guid et SQL uniqueidentifier
Le regex peut être simplifiée: [A-Z0-9] {8 } - (?: [A-Z0-9] {4} -) {3} [A-Z0-9] {12} –
il peut être fait plus court que ce que j'ai proposé, en effet :-) Mais je pense que je ' d aller encore avec la version "longue", qui est "plus simple/plus rapide" à comprendre quand vous devez le lire - il ne cha nge beaucoup, mais autant que regex sont un outil puissant, ils sont souvent difficiles à comprendre pour ceux qui ne les connaissent pas bien ... –
Les GUID ne sont-ils pas hexadécimaux? Alors pourquoi correspondre sur A-Z au lieu de A-F? Ou est-ce que je manque quelque chose ici? – kander