कंप्यूटर, प्रोग्रामिंग
पीएचपी (regex) - यह क्या है? उदाहरण और नियमित अभिव्यक्ति की जाँच
जब किसी भी आधुनिक प्रोग्रामिंग भाषा में पाठ के साथ कार्य, डेवलपर्स लगातार वांछित पैटर्न के अनुपालन के लिए इनपुट सत्यापन के उद्देश्यों के साथ मिलने खोज और परीक्षण टुकड़े और चरित्र के बारे में जानकारी के संचालन के प्रसंस्करण के अन्य प्रकार की जगह। अपनी खुद की मान्यता एल्गोरिदम का विकास समय की हानि, कोड अनुकूलता और इसके विकास और आधुनिकीकरण में जटिलता की ओर जाता है।
इंटरनेट और वेब डिजाइन भाषाओं के तेजी से विकास के लिए इस कोड के लिए आवश्यक एक न्यूनतम राशि के साथ पाठ प्रसंस्करण के बहुमुखी और कॉम्पैक्ट साधन के सृजन की आवश्यकता है। यह कोई अपवाद नहीं है और शुरुआती और PHP भाषा के पेशेवर डेवलपर्स के बीच लोकप्रिय है। पाठ टेम्पलेट्स के रूप में नियमित अभिव्यक्ति भाषा पाठ से निपटने का काम सरल और दसियों और लाइनों के सैकड़ों के लिए कोड को कम। कई समस्याओं बिल्कुल यह बिना हल नहीं किया जा सकता है।
पीएचपी में रेगुलर एक्सप्रेशन
«एरेग», «mb_ereg» और «preg» - PHP भाषा नियमित अभिव्यक्ति के साथ काम करने के लिए तीन प्रक्रियाओं का है। सबसे आम इंटरफेस «preg», जिसका कार्य PCRE नियमित अभिव्यक्ति का समर्थन, मूल रूप से पर्ल भाषा है, जो पीएचपी पैकेज में शामिल है के लिए विकसित की पुस्तकालय के लिए पहुँच प्रदान करता है। Preg मांग किसी दिए गए पाठ स्ट्रिंग मिलान में काम करता है, नियमित अभिव्यक्ति की भाषा में एक निश्चित पैटर्न के अनुसार।
वाक्य रचना मूल बातें
एक संक्षिप्त लेख के हिस्से के रूप में यह पूरे नियमित अभिव्यक्ति वाक्यविन्यास विस्तार से वर्णन है, इस के लिए वहाँ एक विशेष साहित्य है असंभव है। हम केवल मुख्य तत्व पेश डेवलपर के लिए अवसरों दिखाने के लिए और कोड उदाहरण को समझने के लिए।
PHP में नियमित अभिव्यक्ति औपचारिक रूप से बहुत मुश्किल परिभाषित किया गया है, और इसलिए विवरण को आसान बनाने में। रेगुलर एक्सप्रेशन एक पाठ स्ट्रिंग है। यह एक समर्पित विभाजक टेम्पलेट और संशोधक जिस तरह से यह संभाल करने के लिए यह दर्शाता है के होते हैं। विभिन्न विकल्प और पैटर्न के repetitions में संभावित रूप से शामिल।
उदाहरण के लिए, अभिव्यक्ति में / \ घ {3} - \ घ {2} - \ घ {2} / मी विभक्त "/" टेम्पलेट के बाद है, और प्रतीक «मीटर» संशोधक है।
सभी नियमित अभिव्यक्ति की शक्ति मेटा-अक्षरों का उपयोग एन्कोड किया गया है। "\" - मुख्य भाषा metacharacter बैकस्लैश है। यह विपरीत पर अक्षर निम्नलिखित के प्रकार में परिवर्तन (यानी ई। एक साधारण चरित्र वाइल्डकार्ड और इसके विपरीत में बदल)। «|», वैकल्पिक टेम्पलेट निर्दिष्ट करता है एक अन्य महत्वपूर्ण metacharacter एक सीधी रेखा है। मेटा-पात्रों में से अधिक उदाहरण:
| ^ | शुरू वस्तु या एक स्ट्रिंग |
| ( | शुरू subpattern |
| ) | अंत subpattern |
| { | प्रारंभ परिमाणक |
| } | अंत परिमाणक |
| \ घ | 0 से 9 तक दशमलव अंकों |
| \ डी | किसी भी चरित्र है कि एक नंबर नहीं है |
| \ रों | खाली प्रतीक, अंतरिक्ष, टैब, |
| \ w | प्रतीक शब्दकोश |
पीएचपी, नियमित अभिव्यक्ति, अंतरिक्ष में एक अलग मान्य वर्ण के रूप में माना है, तो XYZ और एबीसी की अभिव्यक्ति कहां अलग हैं प्रसंस्करण।
subpatterns
कोष्ठकों द्वारा पीएचपी नियमित subpatterns में, और वे कभी-कभी "subexpressions" कहा जाता है। निम्नलिखित कार्य:
आवंटन विकल्प। उदाहरण के लिए, गर्मी पैटर्न (कुछ | पक्षी |) शब्द "गर्मी" के साथ मेल खाता, "Firebird 'और' हॉट '। और कोष्ठक के बिना यह केवल एक खाली स्ट्रिंग, "पक्षी" और 'हॉट' हो जाएगा।
"शानदार" subpattern। इसका मतलब यह है कि अगर पैटर्न सबस्ट्रिंग का मिलान नहीं हुआ, तो सभी मैचों देता है। स्पष्टता के लिए, हम एक उदाहरण देता हूँ। निम्नलिखित नियमित अभिव्यक्ति को देखते हुए: विजेता को मिलने वाले ((सोना | सोना प्लेटेड) (पदक | कप)) - और मैचों के लिए स्ट्रिंग, "विजेता को एक स्वर्ण पदक हो जाता है।" प्रारंभिक वाक्यांश के अलावा, खोज परिणाम जारी किया जाएगा: "स्वर्ण पदक", "पदक", "सोना"।
ऑपरेटर्स repetitions (kvadrifikatory)
नियमित अभिव्यक्ति संकलन में अक्सर संख्या और प्रतीकों की पुनरावृत्ति का विश्लेषण करने के लिए आवश्यक है। यह एक समस्या है, अगर नहीं पुनरावृत्ति का एक बहुत नहीं है। लेकिन जब हम उनके सही संख्या पता नहीं है क्या करना है? इस मामले में यह विशेष अक्षरों से परे का उपयोग करने के लिए आवश्यक है।
अक्षरों से परे संख्या निर्दिष्ट करने की - इस्तेमाल किया kvadrifikatory repetitions के वर्णन के लिए। Kvadrifikatory दो प्रकार के होते हैं:
- कोष्ठक में आम;
- कम कर दिया।
कुल मिलाकर परिमाणक इस तरह के एक्स {2,5} के रूप में कोष्ठकों में दो नंबर, के रूप में अनुमति दी repetitions तत्व की न्यूनतम और अधिकतम संख्या से छुआ। repetitions की अधिकतम संख्या ज्ञात नहीं है, तो दूसरा तर्क निर्दिष्ट नहीं है: एक्स {2}।
संक्षिप्त परिमाणकों अनावश्यक रूप से अधिक भार वाक्य रचना से बचने के लिए पुनरावृत्ति का सबसे आम के लिए प्रतीक हैं। आमतौर पर तीन में कटौती कर रहे हैं:
1. * - शून्य या अधिक repetitions, जो {0,} के बराबर है।
2. + - एक या अधिक repetitions, यानी, {1} ...
3.? - शून्य या केवल एक ही बार-बार - {0,1}।
उदाहरण regex
सबसे अच्छा पाठ्यपुस्तक - जो लोग नियमित अभिव्यक्ति, उदाहरण जानने के लिए। हम कुछ उस प्रयास की एक न्यूनतम के साथ अपने अवसरों को दिखाने दे। सभी कोड पीएचपी 4.x और इसके बाद के संस्करण के संस्करण के साथ पूरी तरह से संगत है। पूरी तरह से वाक्य रचना और हम जम्मू .. फ़्रिड्ल, "नियमित अभिव्यक्ति" है, जो पूरी तरह से वाक्य रचना माना द्वारा पुस्तक की सिफारिश सभी भाषा सुविधाओं के उपयोग को समझने के लिए, और वहाँ नियमित अभिव्यक्ति न केवल पीएचपी, लेकिन यह भी एक अजगर, पर्ल, MySQL, जावा, रूबी, और सी # के लिए के उदाहरण हैं।
मान्यता ई-मेल पता
टास्क। वहाँ एक इंटरनेट पृष्ठ पर आगंतुक पता ईमेल का अनुरोध किया जाता है। नियमित अभिव्यक्ति संदेश भेजने से पहले पतों की सत्यता की जांच करना चाहिए। चेक गारंटी नहीं है कि निर्दिष्ट मेलबॉक्स वास्तव में मौजूद है और संदेश प्राप्त करता है। लेकिन स्पष्ट रूप से गलत पतों यह कर सकते हैं बाहर निकाल।
निर्णय। किसी भी प्रोग्रामिंग भाषा के रूप में, PHP में regex ईमेल पते की पुष्टि अलग अलग तरीकों से लागू किया जा सकता है, और इस लेख में उदाहरण के लिए अंतिम और एकमात्र विकल्प नहीं हैं। इसलिए, प्रत्येक मामले में, हम आवश्यकताएं प्रोग्रामिंग और विशिष्ट कार्यान्वयन डेवलपर पर पूरी तरह से निर्भर ध्यान में रखा जाना करने की जरूरत है की एक सूची प्रदान करेगा।
इस प्रकार, अभिव्यक्ति है कि एक वैध ईमेल का परीक्षण करती है, की जाँच करनी चाहिए निम्न स्थितियों में:
- शुरुआत में उपस्थिति लाइन @ प्रतीक, और कोई अंतराल हैं।
- @ प्रतीक के पते के डोमेन भाग, डोमेन नाम के लिए ही मान्य वर्ण हैं। एक ही उपयोगकर्ता के नाम के लागू होता है।
- जब उपयोगकर्ता नाम की जाँच के इस तरह के एक apostrophe या खड़ी रेखा के रूप में विशेष वर्ण की उपस्थिति निर्धारित करने के लिए आवश्यक है। इस तरह के प्रतीकों संभावित खतरनाक होते हैं और कि SQL इंजेक्शन हमलों के इस तरह के प्रकार में शामिल किया जा सकता है। पतों से बचें।
- उपयोगकर्ता नाम केवल एक ही बिंदु है, जो श्रृंखला में पहला या अंतिम वर्ण नहीं हो सकता अनुमति देते हैं।
- डोमेन नाम कम से कम दो और अधिकतम छह वर्ण होने चाहिए।
उदाहरण के लिए, खाते में इन शर्तों के सभी लेने के निम्न चित्र में देखा जा सकता है।
एक यूआरएल का सत्यापन
टास्क। जाँच करें कि क्या निर्दिष्ट पाठ स्ट्रिंग मान्य है पता यूआरएल। एक बार फिर, हम ध्यान दें कि नियमित अभिव्यक्ति यूआरएल-चेकिंग विभिन्न तरीकों से लागू किया जा सकता।
निर्णय। हमारा अंतिम संस्करण इस प्रकार है:
/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]{2,6})([\/\w \ .-] *) * \ /? $ /
अब ड्राइंग का उपयोग कर और अधिक विस्तार में उसके घटकों का विश्लेषण।
| दावा 1 | इससे पहले कि यूआरएल कोई भी वर्ण नहीं होना चाहिए |
| दावा 2 | अनिवार्य उपसर्ग की उपस्थिति चेक «http» |
| आइटम 3 | कोई प्रतीक होना चाहिए |
| दावा 4 | अगर वहाँ «रों», एक सुरक्षित कनेक्शन के लिए URL अंक «https» |
| दावा 5 | के आवश्यक भाग "//" |
| दावा 6 | कोई वर्ण |
| पी। 7-9 | सत्यापित किया जा रहा पहला स्तर डोमेन और बिंदु की उपस्थिति |
| p.10-13 | दूसरे स्तर और बिंदु लिखने के डोमेन को सत्यापित करने |
| p.14-17 | फ़ाइल संरचना यूआरएल - संख्या, अक्षर, अंडरस्कोर, डैश, डॉट्स का एक सेट है, और अंत में एक स्लेश |
क्रेडिट कार्ड नंबर की जाँच करें
टास्क। आपके द्वारा दर्ज किया सबसे आम भुगतान प्रणाली के क्रेडिट कार्ड नंबर के सत्यापन को लागू करने की जरूरत है। केवल कार्ड के लिए एक संस्करण वीजा और मास्टर कार्ड।
निर्णय। जब अभिव्यक्ति बनाने आप इनपुट कक्ष में अंतराल के संभावित उपस्थिति को ध्यान में रखना करने की आवश्यकता है। नक्शे पर अंक आसानी से पढ़ने और श्रुतलेख के लिए समूहों में विभाजित हैं। इसलिए, यह स्वाभाविक है कि एक व्यक्ति (यानी ई। रिक्त स्थान का प्रयोग) इस तरह से एक नंबर दर्ज करने की कोशिश कर सकते हैं।
एक सार्वभौमिक अभिव्यक्ति है कि खाते में संभव रिक्त स्थान या हाइफ़न लेता लिखें, की तुलना में केवल अंक के अलावा सभी पात्रों त्यागने अधिक जटिल है। इसलिए, हम एक वाइल्डकार्ड अभिव्यक्ति / डी, जो अंक को छोड़कर सभी पात्रों को हटा का उपयोग करें।
अब आप चेक संख्या के लिए सीधे जा सकते हैं। सभी कंपनियों, क्रेडिट कार्ड जारीकर्ता एक अद्वितीय संख्या प्रारूप का उपयोग करें। उदाहरण में यह प्रयोग किया जाता है, और ग्राहक कंपनी के नाम दर्ज करने की आवश्यकता नहीं है - यह संख्या से निर्धारित होता है। वीजा कार्ड हमेशा संख्या 4 से प्रारंभ और 13 या 16 अंकों की लंबाई है। मास्टर कार्ड एक लंबे संख्या 16 नतीजतन साथ 51-55 की रेंज में शुरू होता है, हम निम्नलिखित अभिव्यक्ति मिलती है:
आदेश को प्रोसेस करने से पहले आगे संख्या है, जो Luhn एल्गोरिथ्म पर गणना की जाती है के अंतिम अंक का परीक्षण किया जा सकता है।
सत्यापित किया जा रहा फोन नंबर
टास्क। दर्ज फ़ोन नंबर की सत्यता की जांच की जा रही।
निर्णय। फिक्स्ड और मोबाइल टेलीफ़ोन नंबर में अंकों की संख्या काफी देश के आधार पर बदलती है, तो सार्वभौमिक, फोन नंबर सही ढंग से असंभव नियमित अभिव्यक्ति का उपयोग कर की जाँच करें। लेकिन अंतर्राष्ट्रीय नंबर पैटर्न की जाँच के लिए एक सख्त प्रारूप और सही है। इससे भी अधिक ताकि अधिक से अधिक राष्ट्रीय टेलीफोन ऑपरेटरों एक ही मानक को पूरा करने की कोशिश कर रहे हैं। कक्ष संरचना इस प्रकार है:
+ CCC.NNNNNNNNNNxEEEE, जहां:
- सी - देश 1-3 अंको वाला कोड है।
- एन - 14 अंक से ऊपर नंबर।
- ई - वैकल्पिक विस्तार।
प्लस एक अनिवार्य तत्व है, और संकेत एक्स वर्तमान केवल जब विस्तार की जरूरत है।
परिणामस्वरूप हम निम्नलिखित अभिव्यक्ति है:
^ \ + [0-9] {1,3 } \ [0-9] {4,14}। (:। X +)? $
श्रेणी की संख्याएं
टास्क। यह एक निश्चित सीमा के संयोग पूर्णांक सुनिश्चित करने के लिए आवश्यक है। इसके अलावा, यह एक नियमित अभिव्यक्ति सीमा से केवल संख्या को खोजने के लिए आवश्यक है।
निर्णय। यहां सबसे सामान्य मामलों में से कुछ के लिए कुछ अभिव्यक्ति कर रहे हैं:
| 1 से 24 घंटे का निर्धारण | ^ (1 [0-2] | [1-9]) $ |
| महीने के 1-31 में दिन | ^ (3 [01] | [12] [0-9] | [1-9]) $ |
| सेकंड या मिनट 0-59 | ^ [1-5]? [0-9] $ |
| 1 से 100 तक से एक नंबर | * (100 |? [1-9] [0-9]) $ |
| साल 1-366 के दिन | ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} |? [1-9] [0-9]) $ |
खोजें आईपी पतों
टास्क। यह निर्धारित करने के लिए एक दिया स्ट्रिंग 000.000.000.000-255.255.255.255 से रेंज में आईपीवी 4 प्रारूप में एक मान्य IP पता है कि क्या आवश्यक है।
निर्णय। पीएचपी की भाषा में किसी भी समस्या के साथ होता है, नियमित अभिव्यक्ति कई varintov है। उदाहरण के लिए, इस:
अभिव्यक्ति की ऑनलाइन जाँच
सही ढंग से regex चेक शुरुआती वाक्य रचना की जटिलता है, जो "नियमित" प्रोग्रामिंग भाषाओं से अलग है की वजह से मुश्किल हो सकता है के लिए। इस समस्या को हल करने के लिए, वहाँ कई ऑनलाइन परीक्षकों भाव यह है कि यह आसान आप वास्तविक पाठ में बनाया टेम्पलेट की सत्यता की जांच करने के लिए कर रहे हैं। प्रोग्रामर अभिव्यक्ति और सत्यापन डेटा में प्रवेश करती है और तुरंत प्रसंस्करण के परिणाम देखें। आम तौर पर एक संदर्भ अनुभाग, जो सबसे अधिक विस्तारित भाषाओं के लिए नियमित अभिव्यक्ति, उदाहरण और कार्यान्वयन मतभेद विवरण प्रस्तुत करते है।
लेकिन पूरी तरह से विश्वास ऑनलाइन सेवाओं के लिए परिणाम सभी डेवलपर जो पीएचपी का उपयोग के लिए अनुशंसित नहीं। रेगुलर एक्सप्रेशन लिखा है और व्यक्ति में सत्यापित, योग्यता को जन्म देती है और त्रुटियों के अभाव की गारंटी।
Similar articles
Trending Now