php - Geçerli guid kontrol

3 Cevap php

Benim birincil anahtarlar Guıd'lerini olduğu bir mssql veritabanı var. Bazı veri eklemek için bir web arayüzü üzerinde çalışıyorum. Ben php tarafından oluşturulan bir GUID, gerekir. I com_create_guid() function kullanıyorum. Yani, eklediğinizde denemeden önce benim parametrelerinin geçerli olduğundan emin olmak istiyorum. Bir dize (com_create_guid() dizesini döndürür) olmadığını kontrol etmek için bir yol bulamıyorum geçerli bir GUID.

3 Cevap

Göz önüne alındığında, bir GUID Böyle bir şey olarak tanımlanır: "A98C5A1E-A742-4808-96FA-6F409E799937" (from what the wikipedia page says)

Ben böyle bir regex yapardı kullanarak varsayalım:

$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');
}

Bunun için maç olacak

  • 8 karakter (harf ve sayılar hem de)
  • 4 karakter
  • 4 karakter
  • 4 karakter
  • 12 karakter

Karakter Her set bir '-' ile ayrılmış olan


Considering you're using com_create_guid, the regex check for optionnals } and { arround the guid, which means this would display 'ok' too :

$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');
}

UUID / GUID desen empoze edilmesi gereken birkaç kural Onların bulunmaktadır.

  • Sadece geçerli harfler a, b, c, d, e ve f.
  • 0-9 haneli desen \ d ile değiştirilebilir
  • Guid genellikle duyarsız harf vardır.
  • Sen {iki parantez} var, ya hiç yok ya.

basitleştirilmiş desenleri

  • hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
  • {Hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh}

ifade:

var_dump(
preg_match("/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i", $guid)
? "ok", "not ok");

çevirisi:

  1. İfade / başlangıcı
  2. Dizenin ^ başlangıcı
  3. (\{)? isteğe bağlı açma aparatı {
  4. [a-f\d]{8} 8 onaltılık karakter hhhhhhhh
  5. Dash-hhhh tarafından ilerledi (-[a-f\d]{4}) 4 onaltılık karakter
  6. {4} önceki model 4 kez tekrarlanır
  7. [a-f\d]{8} 8 onaltılık karakter hhhhhhhh
  8. İlk desen mevcut ise (?(1)\}) {, ardından kapanış etiketi maç}
  9. Dizenin $ end
  10. / ifade kapatmak
  11. i harf duyarlılığı göz ardı

İşte GUID'lerin farklı sürümleri için regex yıllardan bir demet: http://www.roscripts.com/PHP_regular_expressions_examples-136.html