2012-02-27 10 views
6

मैं एक व्यवस्थापक यूआई का निर्माण कर रहा हूं जहां उपयोगकर्ता एक सूची पीसीआरई स्ट्रिंग्स का प्रबंधन कर सकता है जो मेरे आवेदन के अन्य बिंदुओं पर PHP के preg_match पर पास हो जाता है।मैं कैसे बता सकता हूं कि दी गई स्ट्रिंग PHP के preg_match पर मान्य इनपुट है या नहीं?

preg_match द्वारा बाद में उपयोग के लिए उपयोगकर्ता के इनपुट को संग्रहीत करने से पहले, मैं पहले यह सत्यापित करना चाहता हूं कि उपयोगकर्ता का इनपुट एक वैध पीसीआरई अभिव्यक्ति है, अन्यथा बाद में इसे preg_match पर गुजरने पर त्रुटि उत्पन्न होती है।

यह देखने के लिए किसी दिए गए स्ट्रिंग को सत्यापित करने का सबसे अच्छा तरीका क्या है कि यह PHP में मान्य पीसीआर है या नहीं?

उत्तर

3

आपकी सर्वश्रेष्ठ शर्त केवल स्ट्रिंग को preg_match पर पास करने के लिए होगी, और होने वाली किसी भी त्रुटि को पकड़ने के लिए होगा।

try{ 
    preg_match($in_regex, $string, $results); 
    //Use $results 
} catch (Exception $e) { 
    echo "Sorry, bad regex (/" . $in_regex . "/)"; 
} 

[संपादित करें] कि चूंकि काम करेंगे नहीं, तो आप की कोशिश कर सकते:

function bad_regex($errno, $errstr, $errfile, $errline){ 
    echo "Sorry, bad regex."; 
} 
set_error_handler("bad_regex"); 
preg_match($in_regex, $string, $results); 
restore_error_handler(); 
+0

मुझे नहीं लगता था 'preg_match' एक catchable अपवाद फेंक दिया ... मुझे इस कोशिश करते हैं। अगर मैं गलत हूं तो मुझे भेड़ का बच्चा लगता है! – Josh

+0

इसके अलावा आप त्रुटि – scibuff

+0

त्रुटि के बारे में अधिक जानने के लिए 'preg_last_error' का उपयोग कर सकते हैं, यह काम नहीं करेगा। 'preg_match' अपवाद नहीं फेंकता है, यह' E_WARNING' का कारण बनता है: 'चेतावनी: preg_match(): Delimiter लाइन 4' पर अल्फान्यूमेरिक या बैकस्लैश नहीं होना चाहिए। यह मेरे ऐप की बचत प्रक्रिया को बाधित करेगा, क्योंकि मैं उस चेतावनी को पकड़ नहीं सकता और फिर से शुरू नहीं कर सकता। – Josh

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

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