मैं नियमित अभिव्यक्ति के साथ अच्छा नहीं कर रहा हूँ, तो मैं भी नहीं जानता कि क्या यह एक करता है में विफल रहता है, वास्तव में:preg_match php> 5.3
echo preg_match('/^(([a-zA-Z0-9\x2d]{1,63}\x2e)*[a-zA-Z0-9\x2d]{1,63}){1,254}$/', 'example12345678.com>');
मैं इसे Zend फ्रेमवर्क के एक पुराने संस्करण से ले गया - 1.5, जो पुराना है और ढांचे के अंतिम स्थिर संस्करण में यह regexp अब प्रस्तुत नहीं किया गया है। हालांकि, इसका व्यवहार उत्सुक है, क्योंकि मुझे आधिकारिक PHP संसाधनों में कोई दस्तावेजी स्पष्टीकरण या पिछड़ा असंगतता नोट नहीं मिला है।
बात यह है कि php 5.2 पर है * यह ठीक काम करता है:। रिटर्न 0. php 5.3.10, 5.4.0 पर यह FALSE देता है, जिसका अर्थ है 'एक त्रुटि (सबसे अधिक संभावना 5.3 , 5.4 मुझे लगता है।।) "।
मेरा प्रश्न है: क्यों? और त्रुटि क्या है? क्या यह regexp है, किसी तरह का रिकर्सन या नियम अस्पष्टता? यदि ऐसा है तो यह PHP 5.2 पर क्यों काम करता है?
दिलचस्प बात यह है कि अगर मैं बदल 'example12345678.com>' के लिए 'example1234567.com>' (जिससे यह एक या अधिक चार कम) - कि काम शुरू करने और 0. देता है, तो मैं इसे 123123123123123123123123123 करने के लिए 'को बदलने 'यह भी काम करता है और रिटर्न 1.
युपीडी: अभी तक पता नहीं है, तो इस मामले को लेकिन PCRE संस्करणों यहां 8.02 (php 5.2) बनाम 8.12 कर रहे हैं (php 5,3)
UPD2: मैं समझता हूं कि यह क्या है ... अधिक या कम ... और अभी कुछ भी काम करने में कोई समस्या नहीं है। जैसा कि मैंने कहा - एक Zend_Validate_ * अद्यतन हल करता है। मैं अन्य शब्दों में अपनी चिंता का वर्णन करने की कोशिश करूंगा:
कहता है, मैं php5.2> php5.3 स्विच बनाने, सॉफ़्टवेयर का एक महत्वपूर्ण टुकड़ा अपग्रेड करता हूं। मैं उन सभी समस्याओं पर जानकारी ढूंढने का प्रयास करता हूं जिनसे मुझे सामना करना पड़ सकता है (ज्यादातर इसे पढ़कर: http://php.net/manual/en/migration53.php)। सॉफ्टवेयर थोड़ा पुराना है, लेकिन यह प्राचीन नहीं है, उदा। ज़ेंड फ्रेमवर्क संस्करण 1.5 का हो सकता है। मैं प्रत्येक बीसी ब्रेक और बहिष्कृत फीचर को चेक/पैच/विश्लेषण और ठीक करता हूं। यहां तक कि मेरे यूनिट परीक्षण भी ठीक चलते हैं।
मेरे आश्चर्य के लिए सवाल में क्या वर्णन किया गया है। (सटीक होने के लिए, Zend_Validate_Hostname वहां अपवाद फेंकता है)। तो अब मैं जानना चाहता हूं कि अपग्रेड करते समय मुझे यह क्यों याद आया और, और क्या महत्वपूर्ण है, क्या मुझे ऐप में सभी 'preg_match' (और अन्य पीसीआर उपयोग करने वाले फ़ंक्शंस) को दोबारा जांचना चाहिए, जैसे कि "बग फिक्स" "।
यदि यह एक "बग फिक्स" है। क्योंकि यह एक नई बग की तरह दिखता है - यह php5.2 में अपेक्षित काम करता था और अब और काम नहीं करता है।
खोज को सीमित करने के लिए कुछ सुराग प्राप्त करने की उम्मीद कर रहा था।
तुम इसे कैसे उपयोग कर रहे हैं यदि आप नहीं जानते कि वह क्या करता , ठीक ठीक? – ilanco
और आपने इसे किस फाइल से लिया? –
@ilanco, मैं इसे ढांचे के एक हिस्से के रूप में उपयोग कर रहा हूं। हालांकि यह ऑफटॉप है। – lcf