Ana anahtarların GUID olduğu bir mssql veritabanım var. Bazı veriler eklemek için bir web arayüzünde çalışıyorum. Php tarafından oluşturulan bir GUID'e ihtiyacım var. com_create_guid()
işlevini kullanıyorum. Yani, eklemeyi denemeden önce parametrelerimin geçerli olduğundan emin olmak istiyorum. Bir dize (com_create_guid()
dizgi döndürür) geçerli bir GUID olup olmadığını kontrol etmek için bir yol bulamıyorum. Bir GUID düşünüldüğündephp - geçerli guid'i denetle
20
A
cevap
27
böyle bir şey olarak tanımlanır:
(wikipedia sayfası ne diyor itibaren) "-A742-4808-96FA-6F409E799937 A98C5A1E" Ben yapacağını böyle bir regex 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');
}
O
- 8 karakterden (harfler ve rakamlar her ikisi de) için maç olacak
- 4 karakter
- 4 karakter
- 4 karakter
- 12 karakter
karakter Her sette, sen com_create_guid
kullandığınız düşünüldüğünde bir '-
'
ile ayrılmış olan }
ve {
seçenekli kurallar için regex denetimini de yapın, bu da 'ok' görüntülenecek:
$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
UUID/GUID düzeninde uygulanması gereken bazı kurallar vardır.
- Geçerli olan tek harfler şunlardır: a, b, c, d, e ve f.
- 0-9, rakam örneğiyle değiştirilemez. \ D
- GUID'ler genellikle büyük/küçük harf duyarlıdır.
- Ya iki tane de {parantez} var ya da hiç yok.
basitleştirilmiş modeller
- hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh
- {hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh}
Ekspresyon:
var_dump(
preg_match("/^(\{)?[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}(?(1)\})$/i", $guid)
? "ok", "not ok");
Çeviri:
- / başlangıcı dizenin başında
- (\ {)? isteğe bağlı açma aparatı {
- [af \ d] {8} 8 onaltılık karakter hhhhhhhh
- (- [af \ d] {4}) 4 altıgen karakter çizgi ile devam -hhhh
- {4} önceki model tekrarlandı 4 kez
- [af \ d] {8} 8 onaltılık karakter hhhhhhhh
- (? (1) \}) birinci desen mevcut ise {, eşleştirmek kapatma Etiket}
- / yakın dize ifade
- Duymazlıktan durumda hassasiyeti
- $ uç normal ifade basitleştirilebilir
İlgili konular
- 1. Geçerli Düğüm Sürümünü Denetle
- 2. geçerli zamanı artı PHP
- 3. PHP'de Unicode'u denetle
- 4. .class dosyalarındaki içeriği denetle
- 5. ejabberd: Mnesia tablolarını denetle?
- 6. WPF Açılır penceresini denetle
- 7. Zamanlanmış görevler durumunu denetle
- 8. Facebook iOS SDK v4.0 Kullanıcı Oturumunu Denetle
- 9. Boş değerler olup olmadığını denetle
- 10. xmllint ile XML sözdizimini denetle
- 11. VBA Geçiş Formu, İşlevleri Denetle
- 12. WPF Kaydırma ana denetimini denetle
- 13. Windows Installer Sürümünü Denetle Sürüm
- 14. Windows Update etkinleştirilirse .NET'den denetle
- 15. symlink'd php script geçerli dizini değil gerçek php script olsun
- 16. PHP o kişinin geçerli yaşı hesapla
- 17. Geçerli ayın satırlarını seçme mysqli & php
- 18. Kontrol edilecek PHP Geçerli URL İçinde Var
- 19. Geçerli sayfanın tam URL'sini PHP kullanarak edinme
- 20. Üst veya Alt Üçgen Matrisi Denetle
- 21. .NET 4.5 tam yüklemesini denetle - hangi özellik?
- 22. Eklenen her satırı bir Tetikleyicide denetle
- 23. Varolan anahtarı etkinleştir ile Varolan verileri denetle
- 24. Microsoft Word 2007 dilbilgisini atla Kodu denetle
- 25. Mocking System.Web.Caching.Cache - Boşluk veya boş için denetle?
- 26. bir ağacın alt düğümlerini denetle [ExtJS]
- 27. Bir modülde sahne prod ejabberd örneğini denetle
- 28. VBA Excel'de belirli hücreleri denetle Yazım denetimi
- 29. Yapılandırma çalıştırmanın başarılı olup olmadığını denetle
- 30. Geçerli kullanıcıyı Görünümden görüntüle
: [A-Z, 0-9] {8 } - (?: [A-Z0-9] {4} -) {3} [A-Z0-9] {12} –
önerdiğimden daha kısa yapılabilir :-) Ama sanırım ben ' d hala okumak zorunda zaman anlamak için "basit/quickier" olan "uzun" versiyonu ile gitmek - o olmaz nge çok, ama regex kadar güçlü bir araç, onları iyi bilmeyenler için anlamak zor çoğu zaman ... –
GUIDs onaltılık değil mi? Öyleyse neden A-F yerine A-Z ile eşleşiyor? Yoksa burada bir şey mi özlüyorum? – kander