यदि स्ट्रिंग http: // या https: // से शुरू होती है, तो परीक्षण करने के लिए Regex


200

मैं एक regexp सेट करने की कोशिश कर रहा हूं, जो एक स्ट्रिंग की शुरुआत की जांच करेगा, और अगर इसमें या तो यह http://या https://यह मेल खाना चाहिए।

मैं उसे कैसे कर सकता हूँ? मैं निम्नलिखित कोशिश कर रहा हूँ जो काम नहीं कर रहा है:

^[(http)(https)]://

5
यदि आप केवल स्ट्रिंग की शुरुआत की जाँच कर रहे हैं, तो शायद यह स्ट्रिंग के पहले कुछ वर्णों की सीधी तुलना करने के लिए तेज़ है, जो आपके द्वारा देखे गए पैटर्न के साथ हैं।
templatetypedef

2
आप एक पैदा कर रहे चरित्र समूह के साथ []। यह मच जाएगा एक चरित्र है कि या तो (, ), h, t, t, pया s। यानी यह मैच होगा या s://नहीं । ht://x://
फेलिक्स क्लिंग

2
@templatetypedef: मुझे लगता है कि मुझे कुछ समय से पहले अनुकूलन की समझ है।
cdhowie

4
कई आधुनिक नियमित अभिव्यक्ति पुस्तकालय बहुत तेज हैं । जब तक (बहुत सारे) बैक-ट्रैकिंग नहीं होती है, नियमित अभिव्यक्तियाँ अनुकूल रूप से तुलना कर सकती हैं - या बेहतर - शैली के दृष्टिकोण ( /^x/बनाम बनाम की indexOf(x) == 0) की। "शुरू होता है" शैली के दृष्टिकोण में कम ओवरहेड हो सकता है, लेकिन मुझे संदेह है कि यह शायद ही कभी मायने रखता है - वह चुनें जो सबसे साफ है, जो बहुत अच्छी तरह से हो सकता है: x.StartWith("http://") || x.StartsWith("https://")- लेकिन कोड स्पष्टता से बाहर ऐसा करें, प्रदर्शन में सुधार करने का प्रयास नहीं जब तक कि इसके साथ न्यायोचित न हो। विश्लेषण और आवश्यकताओं :-)

जवाबों:


353

आपका उपयोग []गलत है - ध्यान दें कि []एक वर्ण वर्ग को दर्शाता है और इसलिए केवल एक वर्ण से मेल खाता है। अभिव्यक्ति [(http)(https)]"एक से मेल करने के लिए अनुवाद (, एक h, एक t, एक t, एक p, एक ), या एक s।" (डुप्लीकेट वर्णों की अनदेखी की जाती है।)

इसे इस्तेमाल करे:

^https?://

यदि आप वास्तव में वैकल्पिक उपयोग करना चाहते हैं, तो इस सिंटैक्स का उपयोग करें:

^(http|https)://

PHP इनपुट स्ट्रिंग के रूप में: $ regex = '/ ^ (https ;: \ / \ /)';
स्टीव तौबर

9
स्टीव, मुझे लगता है कि आप अंत में चूक गए: $ regex = '/ ^ (https ;: \ / \ /) /';
चाची

10
बस अगर कुछ अखरोट गलती से http, $ regex = '/ ^ (https ;: \ / \ /) / i' के लिए अपरकेस;
जेफिक

3
आप से बचने के लिए / का उपयोग करना भूल गया। तो यह होगा ^https?:\/\/। क्या मैं सही हू?
शफीज़ादेह

4
@ शफ़िज़ादेह /नियमित अभिव्यक्ति में एक विशेष चरित्र नहीं है, केवल उन भाषाओं में जहां /शाब्दिक नियमित अभिव्यक्ति को नोट करने के लिए उपयोग किया जाता है। उदाहरण के लिए, /सी # का उपयोग करते समय नियमित अभिव्यक्तियों में बचना आवश्यक नहीं है , क्योंकि सी # नियमित अभिव्यक्तियाँ स्ट्रिंग भाग के रूप में व्यक्त की जाती हैं (भाग में)। न ही आपको उनकी आवश्यकता है, कहते हैं, पर्ल (एक वैकल्पिक सीमांकक का उपयोग करते समय m#^https?://#)। तो अपनी टिप्पणी को सीधे संबोधित करने के लिए: (ए) नहीं, मैं कुछ भी बचने के लिए नहीं भूल गया। (b) आपको अपनी पसंद की भाषा में जो भी पात्र विशेष रूप से व्यवहार किए जाते हैं, उनसे बचना होगा।
cdhowie


25
^https?://

आपको संदर्भ के आधार पर, आगे की स्लैश से बचना पड़ सकता है।




0

यह URL एनकोडेड स्ट्रिंग्स के लिए भी काम करेगा।

^(https?)(:\/\/|(\%3A%2F%2F))

0

इस मामले को असंवेदनशील बनाना asp.net में काम नहीं कर रहा था इसलिए मैंने केवल प्रत्येक अक्षर को निर्दिष्ट किया।

यहाँ है कि मैं इसे asp.net RegularExpressionValidator में काम करने के लिए क्या करना था :

[Hh][Tt][Tt][Pp][Ss]?://(.*)

टिप्पणियाँ:

  • (?i)और उपयोग /whatever/iकरना शायद काम नहीं आया क्योंकि जावास्क्रिप्ट सभी मामले में संवेदनशील कार्यक्षमता नहीं लाया है
  • मूल रूप ^से शुरुआत में था , लेकिन इससे कोई फर्क नहीं पड़ा , लेकिन (.*)किया (अभिव्यक्ति के बिना काम नहीं (.*)किया लेकिन बिना काम किया ^)
  • //हालांकि एक अच्छा विचार हो सकता है भागने की जरूरत नहीं है।

यदि आपको इसकी आवश्यकता है तो यहां पूरा RegularExpressionValidator है:

<asp:RegularExpressionValidator ID="revURLHeaderEdit" runat="server" 
    ControlToValidate="txtURLHeaderEdit" 
    ValidationExpression="[Hh][Tt][Tt][Pp][Ss]?://(.*)"
    ErrorMessage="URL should begin with http:// or https://" >
</asp:RegularExpressionValidator>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.