PHP में preg_match का उपयोग करते समय "अज्ञात संशोधक 'जी ..."?


93

यह रेगेक्स मैं उपयोग करने की कोशिश कर रहा हूं:

/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim

मुझे यह इस साइट पर मिला , और जब मैं इसे वहाँ आज़माता हूँ तो यह बहुत अच्छा काम करता है। लेकिन जैसे ही मैं इसे अपने कोड में रखता हूं, मुझे यह संदेश मिल जाता है:

Warning: preg_match() [function.preg-match]: Unknown modifier 'g' in C:\xampp\htdocs\swebook\includes\classes.php on line 22

क्या कोई समझा सकता है कि क्या गलत है, और यह उस वेबसाइट पर क्यों काम कर रहा है और मेरे कोड में नहीं है?


1
हम आपको बेहतर मदद दे सकते हैं यदि हम जानते हैं कि आप वास्तव में रेगेक्स के साथ क्या करने की कोशिश कर रहे थे। और आपको बेहतर मदद की ज़रूरत है - या रेक्सक्स वैसे भी करता है। उस साइट पर उपलब्ध सभी खराब लिखित ईमेल रेगेक्स में से, आपने अच्छी तरह से सबसे खराब चुना है। : /
एलन मूर

2
FYI करें, आपका regexp इस प्रकार के मेल को ठीक करने वाला है: "-.-and-and-.--। @ - some--domain--.com" और इन प्रकार के VALID मेल मान्य नहीं होंगे: "info @ subdomain। domain.com "। अंतिम लेकिन कम से कम \ w बहुत खतरनाक नहीं है क्योंकि PHP प्रोग पर्ल संगत नियमित एक्सप्रेशंस और जावास्क्रिप्ट जैसे पॉसिक्स का उपयोग नहीं करता है। यदि PHP उस सर्वर पर चलता है जो US / UK नहीं है तो स्थानीयकृत \ _ का मिलान होने वाले अक्षरों से भी मेल खाता है, इसलिए आप "àè.com@domain.com" से मेल खाते हैं। अधिक जानकारी के लिए यहां पढ़ें: it.php.net/manual/en/function.preg-replace.php#92443
मार्को डेमायो

जवाबों:


170

के लिए कोई संशोधक नहीं gहै preg_match। इसके बजाय, आपको preg_match_allफ़ंक्शन का उपयोग करना होगा।

इसलिए इसके बजाय:

preg_match("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim", ....)

उपयोग:

preg_match_all("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/im", ....)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.