2009-08-10 12 views
20

मेरे पास एक mssql डेटाबेस है जिसमें मेरी प्राथमिक कुंजी GUID हैं। मैं कुछ डेटा डालने के लिए एक वेब इंटरफ़ेस पर काम कर रहा हूं। मुझे PHP द्वारा जेनरेट की गई एक GUID की आवश्यकता है। मैं com_create_guid() फ़ंक्शन का उपयोग कर रहा हूं। तो, सम्मिलित करने का प्रयास करने से पहले मैं यह सुनिश्चित करना चाहता हूं कि मेरे पैरामीटर मान्य हैं। मुझे यह जांचने का कोई तरीका नहीं मिल रहा है कि कोई स्ट्रिंग (com_create_guid() रिटर्न स्ट्रिंग) मान्य GUID है या नहीं।PHP - वैध guid के लिए जाँच करें

उत्तर

27

एक GUID ध्यान में रखते हुए कुछ इस तरह के रूप में परिभाषित किया गया है: "A98C5A1E-A742-4808-96FA-6F409E799937" (से क्या विकिपीडिया पृष्ठ कहते हैं)

मैं इस एक करना होगा की तरह एक regex का उपयोग कर मान लें कि:

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

यह

  • 8 वर्ण (अक्षर और संख्या दोनों)
  • 012,351,641 के लिए मिलान कर देंगे
  • 4 अक्षर
  • 4 अक्षर
  • 4 अक्षर
  • 12 अक्षर

पात्रों में से प्रत्येक सेट आप com_create_guid उपयोग कर रहे हैं ध्यान में रखते हुए एक '-'


के द्वारा अलग किया जा रहा है guid के आस-पास 0nऔर { के लिए regex चेक, जिसका अर्थ है कि यह 'ठीक' भी प्रदर्शित करेगा:

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

regex सरल किया जा सकता: [एक-Z0-9] {8 } - (?: [ए-जेड 0-9] {4} -) {3} [ए-जेड 0-9] {12} –

+4

इसे मैंने जो प्रस्तावित किया उससे छोटा किया जा सकता है, वास्तव में :-) लेकिन मुझे लगता है कि मैं ' डी अभी भी "लंबे" संस्करण के साथ जाना है, जो समझने के लिए "सरल/तेज" है जब आपको इसे पढ़ना होगा - यह चा नहीं होगा बहुत अधिक है, लेकिन जितना अधिक regex एक शक्तिशाली उपकरण है, वे अक्सर उन लोगों के लिए समझना मुश्किल होता है जो उन्हें अच्छी तरह से नहीं जानते ... –

+13

GUIDs हेक्साडेसिमल नहीं हैं? तो ए-एफ के बजाय ए-जेड पर क्यों मेल करें? या मुझसे यहां कुछ छूट रहा है? – kander

36

कुछ नियम हैं जो यूयूआईडी/GUID पैटर्न पर लगाए जाने चाहिए।

  • केवल वैध अक्षरों में ए, बी, सी, डी, ई, और एफ हैं।
  • 0-9 को अंकों के पैटर्न के साथ प्रतिस्थापित किया जा सकता है \ d
  • GUID अक्सर केस असंवेदनशील होते हैं।
  • आपके पास या तो {दोनों ब्रैकेट} हैं, या कोई भी नहीं।

सरलीकृत पैटर्न

  • hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh
  • {hhhhhhhhhhhh-hhhhhhhh-hhhhhhhhhhhh}

अभिव्यक्ति:

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

अनुवाद:

  1. / अभिव्यक्ति
  2. ^ की शुरुआत स्ट्रिंग की शुरुआत
  3. (\ {)? वैकल्पिक प्रारंभ कोष्ठक {
  4. [वायुसेना \ d] {8} 8 हेक्स पात्रों hhhhhhhh
  5. (- [वायुसेना \ d] {4}) 4 हेक्स पात्रों पानी का छींटा द्वारा दीं -hhhh
  6. {4} पिछले पैटर्न दोहराया 4 बार
  7. [वायुसेना \ d] {8} 8 हेक्स पात्रों hhhhhhhh
  8. (? (1) \}) समापन अगर पहले पैटर्न उपस्थित थे {, तो मेल खाते हैं tag} स्ट्रिंग
  9. / पास अभिव्यक्ति
  10. मैं उपेक्षा मामले संवेदनशीलता के
  11. $ अंत
+1

पहला पैरा: "ई" गायब है :) – Basic

+0

+ ग्रुपिंग त्रुटि। ऐसा लगता है कि अंतिम समूह होना चाहिए: '(? (1) \})' -> '(\})? ', या यहां तक ​​कि \ \}?' क्योंकि यह एक ही चरित्र है। –

+0

-वैकल्पिक हैं। – catbadger

संबंधित मुद्दे