2010-09-14 17 views
8

मैं एक PHP स्क्रिप्ट लिख रहा हूं जो उपयोगकर्ता से नियमित अभिव्यक्ति पैटर्न स्वीकार करता है जिसका उपयोग preg_match() द्वारा किया जाता है। मैं कैसे जांच सकता हूं कि पैटर्न मान्य है?मैं एक अवैध preg_match पैटर्न कैसे पकड़ सकता हूं?

उत्तर

5

बस इसका परीक्षण करें। preg_match() पैटर्न FALSE वापस करेगा यदि पैटर्न मान्य नहीं है।

रिटर्न मान: preg_match() पैटर्न मिलानों की संख्या देता है। यह 0 गुना (कोई मिलान नहीं) या 1 बार होगा क्योंकि preg_match() पहले मैच के बाद खोज करना बंद कर देगा। preg_match_all() इसके विपरीत विषय के अंत तक पहुंचने तक जारी रहेगा। preg_match() त्रुटि उत्पन्न होने पर FALSE लौटाता है।

8

docs के अनुसार,

() के FALSE देता है यदि कोई त्रुटि हुई।

समस्या यह है कि यह एक चेतावनी भी फेंक देगा।

इससे निपटने का एक तरीका है त्रुटि संदेश के आउटपुट को दबाएं, वापसी मूल्य पकड़ें, और error_get_last() का उपयोग करके त्रुटि को आउटपुट करें यदि यह गलत था।

$old_error = error_reporting(0); // Turn off error reporting 

$match = preg_match(......); 

if ($match === false) 
{ 
    $error = error_get_last(); 
    echo $error["message"]; 
} 

error_reporting($old_error); // Set error reporting to old level 

तरह आप उत्पादन परिवेश में त्रुटि की रिपोर्ट करने बिट की जरूरत नहीं हो सकता है - यह अपने सेटअप पर निर्भर करता है।

+0

+1 त्रुटि संदेश आउटपुट दमन का उल्लेख करने के लिए। – Gumbo

+1

आप जानते हैं, '@ ': पी – Artefacto

+0

का उपयोग करने के लिए मना नहीं किया जाना चाहिए' if ($ match === false) ' – webbiedave

0
if (preg_match($regex, $variable)) { 
    echo 'Valid'; 
} 
else { 
    echo 'InValid'; 
} 
+1

लौटाई गई तो त्रुटि क्यों पंजीकृत नहीं होगी, आपको preg_match (...)! == का उपयोग करने के लिए झूठा होना चाहिए क्योंकि यह वैध है लेकिन यह 0 लौटा सकता है – mck89

+0

से मेल नहीं खाते आपको FALSE की तुलना करनी चाहिए: 'अगर (preg_match ($ regex, $ variable)! == गलत) {'। कोई मिलान के साथ पैटर्न वैध हो सकता है। देखें [डॉक्स] (http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn

0

मैंने सोचा कि मैंने MRE में इसके लिए एक विधि देखी है; यह पता चला कि यह एक फ्रेडल खुद लिखा था। यहां listing है।

-1

PHP का उपयोग नहीं करते हैं, preg_match के सामने पिछड़े स्लैश का उपयोग PHP (5.3+?) के नए संस्करणों में अपवाद फेंकने के लिए करें।

tr{ 
    if (\preg_match($regex, $variable)===false) 
     echo 'Valid'; 
    else 
     echo 'InValid'; 
} 
catch(Exception $e) { 
    echo $e->getMessage(); die; 
} 
+0

बैकस्लैश केवल वैश्विक नामस्थान को संदर्भित करता है। यह अन्यथा कुछ भी नहीं करता है, त्रुटि व्यवहार को भी नहीं बदलता है। –

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