2010-06-17 8 views
5

मेरे वेब ऐप में मुझे एक फॉर्म फ़ील्ड मिला है जहां उपयोगकर्ता यूआरएल दर्ज कर सकता है। मैं पहले से ही कुछ प्रारंभिक क्लाइंट-साइड सत्यापन कर रहा हूं और मैं सोच रहा था कि अगर मैं दर्ज स्ट्रिंग एक मान्य यूआरएल मान्य करता हूं तो मैं regexp का उपयोग कर सकता हूं। तो, दो प्रश्न:क्या एक regexp के साथ एक यूआरएल मान्य करने के लिए सुरक्षित है?

  1. क्या यह regexp के साथ ऐसा करना सुरक्षित है? एक यूआरएल एक जटिल जानवर है, और जैसे कि आपको HTML को पार्स करने के लिए regexp का उपयोग नहीं करना चाहिए, मुझे चिंता है कि यह एक यूआरएल के लिए भी अनुपयुक्त हो सकता है।
  2. यदि यह किया जा सकता है, तो कार्य के लिए एक अच्छा regexp क्या होगा? (मुझे पता है कि Google अनगिनत regexps बदल जाता है, लेकिन मैं उनकी गुणवत्ता के बारे में चिंतित हूँ)।

मेरा लक्ष्य ऐसी स्थिति को रोकने के लिए है जहां URL वेब पेज में दिखाई देता है और ब्राउज़र द्वारा उपयोग करने योग्य नहीं है।

+2

http://stackoverflow.com/questions/1410311/regular-expression-for-url-validation-in-javascript/1411800#1411800 देखें, http://stackoverflow.com/questions/827557/how-do- आप-प्रमाणीकरण-ए-यूआरएल-साथ-नियमित-अभिव्यक्ति-इन-पायथन/827621 # 827621 और http://stackoverflow.com/questions/226505/question-about-url-validation-with-regex/226709# 22670 9 –

उत्तर

0

मुझे लगता है कि, यह है कि एक दृढ़ नियम लेकिन अधिक एक दिशानिर्देश नहीं है कि उसके सुरक्षित

यहाँ एक नमूना

http://snippets.dzone.com/posts/show/452

0

मैं यह सुरक्षित है विश्वास है, और # 1 पर है व्यक्तिगत अनुभव से बोलना।

(([\w]+:)?\/\/)(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)? 

जावास्क्रिप्ट में आप '/' रों नियमित अभिव्यक्ति के आसपास डाल करने के लिए है कि एहसास:

यह एक मैं एक यूआरएल को मान्य करने का उपयोग करें।

+0

यदि आप मेरी प्रतिक्रिया को कम वोट देते हैं, तो कृपया बताएं कि क्यों। –

5

अच्छा ... शायद। लोग अक्सर ईमेल पते के बारे में एक समान प्रश्न पूछते हैं, और उन लोगों के साथ आपको सही ढंग से मान्य करने के लिए एक भयानक जटिल नियमित अभिव्यक्ति की आवश्यकता होगी (यानी कम से कम दो पेज लंबे समय तक)। मुझे नहीं लगता कि यूआरएल काफी जटिल हैं (डब्ल्यू 3 सी में document उनके प्रारूप का वर्णन करता है) लेकिन फिर भी, आपके द्वारा आने वाले किसी भी उचित लघु regexp शायद कुछ मान्य यूआरएल को अवरुद्ध कर देगा।

मैं इस बारे में सोचने का सुझाव दूंगा कि आपको किस प्रकार के यूआरएल स्वीकार करने की आवश्यकता है। हो सकता है कि आपके उद्देश्यों के लिए, कभी-कभी मान्य-लेकिन-अजीब सबमिशन को अवरुद्ध करना ठीक है, और उस स्थिति में आप एक साधारण रेगेक्स का उपयोग कर सकते हैं जो अधिकांश यूआरएल से मेल खाता है, जैसे डोबियोटोवस्की के जवाब में। या आप एक रेगेक्स का उपयोग कर सकते हैं जो सभी मान्य यूआरएल और कुछ अमान्य लोगों को स्वीकार करता है, अगर यह आपके लिए काम करता है। लेकिन मैं एक नियमित अभिव्यक्ति खोजने की कोशिश करने से सावधान रहूंगा जो बिल्कुल मान्य यूआरएल स्वीकार करता है और कोई अमान्य नहीं है। यदि आप इस तरह से 100% मूर्खतापूर्ण सत्यापन करना चाहते हैं, तो मैं दूसरे प्रकार के क्लाइंट-साइड सत्यापन का उपयोग करने का सुझाव दूंगा (जो कुछ अमान्य यूआरएल स्वीकार करता है) और सर्वर पक्ष पर अधिक व्यापक जांच कर रहा है फॉर्म डेटा को संसाधित करने के लिए आप जिस भी भाषा का उपयोग कर रहे हैं उसमें लाइब्रेरी।

+0

हाँ, ईमेल पता सत्यापन। यह एक आम जगह है जहां एक रेगेक्स नौकरी के लिए सिर्फ एक चीज है - लेकिन ऐसा करने के बाद आप बुरी तरह विफल हो जाते हैं। मैं इस बारे में भूल गया था, लेकिन यह एक और कारण है कि मैं यूआरएल को प्रमाणित करने के लिए रेगेक्स का उपयोग करने से थक गया हूं। –

+0

मैं वास्तव में ईमेल पता सत्यापन नापसंद करता हूं। कई कहते हैं कि ईमेल पते में '+' अमान्य है। मुझे वास्तव में जीमेल की एक विशेषता पसंद है जहां यह '+' के बाद हिस्से को अनदेखा करता है और आपको उस दूसरे छमाही तक ईमेल सॉर्ट करने की अनुमति देता है। जब कोई सत्यापन विफल रहता है तो बहुत परेशान होता है। – icktoofay

+0

सभी बहुत मान्य अंक +1। मैंने आरएफसी स्पेक द्वारा यूआरएल को प्रमाणित करने के लिए एक पेज लंबा रेगेक्स देखा है। यदि एक साधारण रेगेक्स अधिकांश मामलों को कवर कर सकता है, तो यह सबसे व्यावहारिक उद्देश्यों के लिए पर्याप्त है। आपको [http: // to।] (Http: // to।) या [http: // travel] (http: // travel) जैसे किनारे-मामलों से मेल खाने की आवश्यकता नहीं होती है, जिनमें से दोनों वैध और मौजूदा हैं यूआरएल बीटीडब्ल्यू – Anurag

2

रेगेक्स लेक्सिकल वैधता के लिए सुरक्षित हैं, लेकिन इसका मतलब यह नहीं है कि साइट वहां होगी। आपको वास्तव में कनेक्शन का परीक्षण करना होगा ताकि यह देखने के लिए कि यह लौटाई गई प्रतिक्रिया की जांच करके वैध यूआरएल है या नहीं। कुल मिलाकर, यह आपके उपयोगकर्ता की आवश्यकताओं पर निर्भर करता है कि क्या वैध है और क्या नहीं है - यह कितना सुरक्षित/सुरक्षित है आप पर निर्भर करता है। यदि आपके पास http://foo.com/?referral=http://bar.com/ जैसा कुछ है, तो यह कुछ स्क्रिप्ट तोड़ देगा क्योंकि उपयोगकर्ता पैरामीटर के रूप में किसी अन्य प्रोटोकॉल/पथ कॉम्बो की अपेक्षा नहीं करते हैं। इसके अलावा, कुछ अन्य विशेष पात्रों और नल बाइट हैक्स को पैरामीटर के साथ फिश चीजें करने के लिए जाना जाता है, लेकिन मुझे नहीं लगता कि कोई सफल रेगेक्स हैक्स - शायद मेमोरी ओवरफ्लो?

यदि ऐसा कुछ है जो सुरक्षित होने की आवश्यकता है, तो इसे शायद सर्वर की तरफ संभाला जाना चाहिए। यद्यपि आप सर्वर साइड जावास्क्रिप्ट कर सकते हैं, मैं शायद पर्ल की सिफारिश करता हूं, क्योंकि इसे टेक्स्ट-आधारित पार्सर के रूप में डिज़ाइन/विकसित किया गया था।

रेगेक्स केवल उतना उन्नत या सीमित है जितना आप इसे बनाते हैं। मनुष्य तार्किक हैं, इसलिए वे जो समस्याएं हल करते हैं उन्हें एक तर्क इंजन (कंप्यूटर) द्वारा हल किया जा सकता है, बशर्ते कि सटीक निर्देश (इस मामले में नियमित अभिव्यक्ति पैटर्न) को पालन करने के लिए दिया जाता है।

@Kerry:

जावास्क्रिप्ट में आप '/' रों डाल नियमित अभिव्यक्ति के आसपास "करने के लिए है" नहीं है। var re = new Regexp("\w+");

वेब उदाहरण::

मुझे लगता है कि केरी बहुत अच्छा था, हालांकि मैं केवल यह एक नज़र दे दी है w/ओ यह जाँच, लेकिन यहाँ कुछ कर रहे हैं वहाँ भी स्थिति जहां आप इसे उद्धरण में डाल सकते हैं कर रहे हैं सरल उदाहरण वेब

http://www.javascriptkit.com/script/script2/acheck.shtml से मिला:

// Email Check 
var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i 
if (filter.test("email address or variable here")){...} 

http://snippets.dzone.com/posts/show/452:

// URL Validation 
function isUrl(s) { 
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ 
    return regexp.test(s); 
} 

अंत में, यह आशाजनक लग रहा है।
http://www.weberdev.com/get_example-4569.html:

// URL Validation 
function isValidURL(url){ 
    var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/; 
    if(RegExp.test(url)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

// Email Validation 
function isValidEmail(email){ 
    var RegExp = /^((([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+(\.([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+)*)@((((([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.))*([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.)[\w]{2,4}|(((([0-9]){1,3}\.){3}([0-9]){1,3}))|(\[((([0-9]){1,3}\.){3}([0-9]){1,3})\])))$/ 
    if(RegExp.test(email)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 
+0

यह मूल रूप से 'RegExp' जैसे देशी ऑब्जेक्ट प्रकारों के बाद आपके फ़ंक्शन वेरिएबल्स को नाम देने के लिए एक सुरक्षित और अच्छी प्रथा नहीं है। इसके अलावा, 'if..else' सिर्फ अनावश्यक है। आप 'regex.test (..) 'के मान को वापस कर सकते हैं जैसा कि आप' isUrl' फ़ंक्शन में कर रहे हैं। – Anurag

+0

जैसा कि मैंने प्रश्न में कहा है, मैं बस एक वेबपृष्ठ पर दिखाई देने वाले एक अवैध यूआरएल से बचना चाहता हूं। यह एक (प्रकार का) सीएमएस का बैकएंड adminpanel है जिस पर मैं काम कर रहा हूं, इसलिए मुझे उस उपयोगकर्ता पर भरोसा है जो यूआरएल दर्ज करेगा। मैं "खराब" यूआरएल को फ़िल्टर नहीं करना चाहता हूं। मैं सिर्फ टाइपो, कॉपी-पेस्ट त्रुटियों और अन्य समस्याओं को रोकना चाहता हूं जिन्हें आप तब तक नहीं देखते जब तक आपके विज़िटर शिकायत करना शुरू नहीं करते। –

+1

@ अनुराग, उदाहरण उनके ऊपर स्थित यूआरएल से खींचे गए थे (अनमोडिफाइड)। यह कहकर कि मैं कर रहा हूं यह अनुचित है, यह उस पृष्ठ का लेखक है जो यह कर रहा है। मैंने केवल उदाहरण रेगेक्स पैटर्न का कोड खींचा, न कि उनके चारों ओर जावास्क्रिप्ट के लिए। @ विल्क्स, आपके द्वारा सूचीबद्ध अतिरिक्त लंबे रेगेक्स उदाहरण में बहुत बार दोहराव प्रतीत होता है। मुझे इसमें देखना होगा, लेकिन मुझे लगता है कि विभिन्न प्रोटोकॉल में लगभग समान रेगेक्स होना चाहिए - उदा। आप कर सकते हैं (http | ftp) एस *। अगर मैंने इसे अपना रास्ता दिया, तो मेरे पास प्रत्येक प्रोटोकॉल के लिए अलग-अलग रेगेक्स चर होंगे और पहले जांचें कि यह कौन सा प्रोटोकॉल था। इसके विपरीत – vol7ron

4

के रूप में, Crescent Fresh द्वारा कहा टिप्पणी में, वहाँ इस एक जो मैं नहीं मिला करने के लिए इसी तरह के सवाल कर रहे हैं। One of them भी एक यूआरएल को मान्य करने के लिए पूर्ण मानकों का अनुपालन करने के लिए regex की आपूर्ति: के रूप में मुझे डर था यह होगा

(?:http://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\. 
)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+) 
){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F 
\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{ 
2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{ 
2}))|[;:@&=])*))?)?)|(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(? 
:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a- 
fA-F\d]{2}))|[;?&=])*))[email protected])?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|- 
)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(? 
:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+! 
*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'() 
,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)|(?:news:(?: 
(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;/?:&=])[email protected](?:(?:(
?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[ 
a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3})))|(?:[a-zA-Z](
?:[a-zA-Z\d]|[_.+-])*)|\*))|(?:nntp://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[ 
a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d 
])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:[a-zA-Z](?:[a-zA-Z 
\d]|[_.+-])*)(?:/(?:\d+))?)|(?:telnet://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+ 
!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'() 
,]|(?:%[a-fA-F\d]{2}))|[;?&=])*))[email protected])?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a 
-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d] 
)?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))/?)|(?:gopher://(?:(?: 
(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?: 
(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+ 
))?)(?:/(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))(?:(?:(?:[ 
a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*)(?:%09(?:(?:(?:[a-zA 
-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:%09(?:(?:[a-zA-Z\d$ 
\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*))?)?)?)?)|(?:wais://(?:(?:(?: 
(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?: 
[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))? 
)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)(?:(?:/(?:(?:[a-zA 
-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(
?:%[a-fA-F\d]{2}))*))|\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d] 
{2}))|[;:@&=])*))?)|(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:% 
[a-fA-F\d]{2}))+))|(?:file://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d] 
|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?: 
(?:\d+)(?:\.(?:\d+)){3}))|localhost)?/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'() 
,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(
?:%[a-fA-F\d]{2}))|[?:@&=])*))*))|(?:prospero://(?:(?:(?:(?:(?:[a-zA-Z 
\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-) 
*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:(?:(?:(? 
:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a- 
zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:(?:;(?:(?:(?:[ 
a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)=(?:(?:(?:[a-zA-Z\d 
$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)))*)|(?:ldap://(?:(?:(?:(?: 
(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?: 
[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))? 
))?/(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]) 
)|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%2 
0)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F 
\d]{2}))*))(?:(?:(?:%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(? 
:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID 
|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa]) 
?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*)(?:(
?:(?:(?:%0[Aa])?(?:%20)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))(?:(?:(?:(?:(
?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|o 
id)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(
?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*))(?:(?:(?: 
%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?:(?:(?:[a-zA-Z\d]|%(
?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?: 
\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a 
-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*))*(?:(?:(?:%0[Aa])?(?:%2 
0)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))?)(?:\?(?:(?:(?:(?:[a-zA-Z\d$\-_.+ 
!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:,(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-f 
A-F\d]{2}))+))*)?)(?:\?(?:base|one|sub)(?:\?(?:((?:[a-zA-Z\d$\-_.+!*'(
),;/?:@&=]|(?:%[a-fA-F\d]{2}))+)))?)?)?)|(?:(?:z39\.50[rs])://(?:(?:(? 
:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(? 
:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+)) 
?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:\+(?:(?: 
[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*(?:\?(?:(?:[a-zA-Z\d$\-_ 
.+!*'(),]|(?:%[a-fA-F\d]{2}))+))?)?(?:;esn=(?:(?:[a-zA-Z\d$\-_.+!*'(), 
]|(?:%[a-fA-F\d]{2}))+))?(?:;rs=(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA 
-F\d]{2}))+)(?:\+(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*) 
?))|(?:cid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&= 
])*))|(?:mid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@ 
&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=] 
)*))?)|(?:vemmi://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z 
\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\ 
.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a 
-fA-F\d]{2}))|[/?:@&=])*)(?:(?:;(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a 
-fA-F\d]{2}))|[/?:@&])*)=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d 
]{2}))|[/?:@&])*))*))?)|(?:imap://(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+ 
!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+)(?:(?:;[Aa][Uu][Tt][Hh]=(?:\*|(?:(
?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+))))?)|(?:(?:;[ 
Aa][Uu][Tt][Hh]=(?:\*|(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2 
}))|[&=~])+)))(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[ 
&=~])+))?))@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d]) 
?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?: 
\d+)){3}))(?::(?:\d+))?))/(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?: 
%[a-fA-F\d]{2}))|[&=~:@/])+)?;[Tt][Yy][Pp][Ee]=(?:[Ll](?:[Ii][Ss][Tt]| 
[Ss][Uu][Bb])))|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2})) 
|[&=~:@/])+)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[ 
&=~:@/])+))?(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1- 
9]\d*)))?)|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~ 
:@/])+)(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-9]\d* 
)))?(?:/;[Uu][Ii][Dd]=(?:[1-9]\d*))(?:(?:/;[Ss][Ee][Cc][Tt][Ii][Oo][Nn 
]=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~:@/])+)))?)) 
)?)|(?:nfs:(?:(?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA- 
Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?: 
\.(?:\d+)){3}))(?::(?:\d+))?)(?:(?:/(?:(?:(?:(?:(?:[a-zA-Z\d\$\-_.!~*' 
(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\-_.!~*'(), 
])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))?)|(?:/(?:(?:(?:(?:(?:[a-zA-Z\d 
\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\ 
-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))|(?:(?:(?:(?:(?:[a-zA- 
Z\d\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d 
\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))) 

जाहिर है इस के रूप में पागल है, तो मैं पूरी बात पुनर्विचार किया जाएगा।

तो, जवाब है - हाँ, यह किया जा सकता है, लेकिन आपको वास्तव में दो बार सोचना चाहिए कि आप इसे इस तरह से करना चाहते हैं। या स्वीकार करें कि रेगेक्स अपूर्ण होगा।

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

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