2010-11-25 11 views
11

मैं एक regex कि इस तरह के यूआरएल को स्वीकार करने के लिए देख रहा हूँ:Regex, FTP

http://www.example.com 
www.example.com 

यह वही है मैं अब तक किया है, लेकिन यह regex http:// बिना यूआरएल से मेल नहीं खाता या https://, या ftp://:

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

मैं कैसे प्रोटोकॉल वैकल्पिक कर सकते हैं?

+1

'example.pl' करने की अनुमति देता: पोलैंड या पर्ल में एक वेबसाइट स्क्रिप्ट? – Boldewyn

+0

@ बोल्डविन, दोनों! :) –

+0

ओपी के मामले में दुर्भाग्य से नहीं। यह या तो रेगेक्स द्वारा खाया जाएगा या नहीं। [आरएफसी 3 9 86] (http://labs.apache.org/webarch/uri/rfc/rfc3986.html#regexp) (लिंक यूआरएल पार्स करने के लिए एक regexp की ओर जाता है) या तो एक योजना या '\ \ 'भाग। हालांकि मैं इस तरह की चीजें खोजने की आवश्यकता को समझता हूं (देखें [एफएफ के लिए लिंकिफिकेशन एडन] (http://yellow5.us/firefox/linkification/)) – Boldewyn

उत्तर

9

(ftp|http|https):\/\/ हिस्सा वैकल्पिक बनाएं:

((ftp|http|https):\/\/)? 
+0

धन्यवाद लेकिन अब मैं उदाहरण के लिए "उदाहरण" या "[email protected]" से मेल खा सकता हूं। और मुझे यह नहीं चाहिए। तो मैं इसे कैसे हल कर सकता हूं? मेरा रेगेक्स: regexp =/((ftp | http | https): \/\ /)? (\ W +: {0,1} \ w * @)? (\ S +) (: [0-9] ? +) (\/| \/([!।?! \ w #: + = &% @ \ - \ /])) /; मैं "[email protected]" या "उदाहरण" – Guest

+0

'उदाहरण @ example.com' से मेल नहीं करना चाहता हूं वास्तव में एक वैध यूआरएल है: पहला' उदाहरण' एक उपयोगकर्ता नाम है, जिसे इस तरह से सबमिट किया जा सकता है। 'Http: //' और 'stackoverflow.com' के बीच एक जोड़ा 'उदाहरण @' के साथ इस पृष्ठ को लोड करने का प्रयास करें। – Boldewyn

+0

ठीक है। मुझे यह नहीं पता था। आपके सहयोग के लिए धन्यवाद। – Guest

2

इस इस प्रयास करें (HTTP, FTP, https) या बिना के साथ यूआरएल को मान्य होगा (HTTP, FTP, https) ..

/^(?:(ftp|http|https):\/\/)?(?:[\w-]+\.)+[a-z]{3,6}$/; 
+2

यह रेगेक्स जर्मनी से डोमेन के लिए यूआरएल स्वीकार नहीं करता है। उदाहरण (www.germany.de)। आपको regex को '/^(?:(ftp|http|https):\/\/)?(?:[\w-]+\.)+[az]{2,6}$/ में बदलना होगा ; '2 महत्वपूर्ण है। –

+0

ऐसा करने का यह एक शानदार तरीका नहीं है। वास्तव में आप जो कुछ भी कर सकते हैं वह ''' की जांच कर रहा है। 6 वर्णों से अधिक लंबे नाम वाले नामों के साथ कई नए टीएलडी हैं ... – Askdesigners

0

कृपया https://codegolf.stackexchange.com/a/480/6593

ऊपर लिंक से हवाला देते हुए:

value = 'www.google.com'; 
if(/(^|\s)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi.test(value)) { 
      return true; 
     } else { 
      return false; 
     } 
1

इस इस के साथ या बिना (HTTP, FTP, https) ऊपरी और निचले मामलों में यूआरएल को मान्य होगा की कोशिश करो और भी numerics के लिए

/^(?:(ftp|http|https)?:\/\/)?(?:[\w-]+\.)+([a-z]|[A-Z]|[0-9]){2,6}$/gi;