2010-04-08 13 views
9

को एक स्ट्रिंग को मान्य करने के लिए: 'www.test.com' अच्छा है। एक स्ट्रिंग जैसे: 'www.888.com' अच्छा है। एक स्ट्रिंग जैसे: 'stackoverflow.com' अच्छा है। एक स्ट्रिंग जैसे: 'GOoGle.Com' अच्छा है।यूआरएल वैध पात्र। जावा

क्यों? क्योंकि वे वैध यूआरएल हैं। यह जरूरी नहीं है कि वे पंजीकृत हैं या नहीं।

अब बुरा तार कर रहे हैं:

'goog * घ \ एक्स' 'manydots ... कॉम'

क्यों क्योंकि आप उन यूआरएल पंजीकृत नहीं कर सकता।

यदि मेरे पास जावा में एक स्ट्रिंग है जो एक अच्छा यूआरएल माना जाता है तो इसे सत्यापित करने का सबसे अच्छा तरीका क्या है?

बहुत बहुत शुक्रिया

+0

संभावित डुप्लिकेट [जावा में वैध यूआरएल की जांच कैसे करें?] (Http://stackoverflow.com/questions/2230676/how-to-check-for-a-valid-url-in-java) –

उत्तर

3

उन उदाहरण होस्टनाम हैं। वे स्वयं में वैध यूआरएल नहीं हैं।

होस्टनाम .-पृथक 'लेबल' से बने हैं। प्रत्येक लेबल अक्षरों, अंकों और हाइफ़न के 63 वर्णों तक होना चाहिए, लेकिन एक हाइफ़न पहला या अंतिम वर्ण नहीं होना चाहिए। किसी अन्य बिंदु के साथ पूरे होस्टनाम का पालन करना वैकल्पिक है।साथ ही

([a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])(\.[a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])*\.? 

हालांकि इस 1.2.3.4 तरह तार से मेल खाता है, जो हालांकि वे तकनीकी रूप से होस्ट/डोमेन हो सकता है नाम वास्तव में के रूप में प्रत्यक्ष कार्य करेगा:

आप की तरह (केस-संवेदी कल्पना करते हुए) एक पैटर्न के साथ इस मिलान कर सकते हैं आईपी ​​पते आप इसे अनुमति देना चाह सकते हैं। यदि आप करते हैं, आप भी IPv6 पतों, जो पेट के द्वारा अलग किए गए हेक्स हैं अनुमति देने के लिए चाहते हो सकता है; जब एक यूआरएल में एम्बेडेड होता है, तो उनके चारों ओर स्क्वायर ब्रैकेट भी होते हैं।

और फिर निश्चित रूप से आईडीएनए है। आजकल, 例え.テスト एक मान्य आईडीएनए डोमेन नाम है, जो xn--r8jz45g.xn--zckzah से संबंधित है। यदि आप उन लोगों को अनुमति देना चाहते हैं तो आपको कुछ यूनिकोड समर्थन की आवश्यकता होगी।

सारांश: यह आपके विचार से कहीं अधिक कठिन है। और यह सिर्फ मेजबाननाम है। एक संपूर्ण यूआरएल 'मान्य' और भी काम है। एक साधारण रेगेक्स इसे हैक करने वाला नहीं है। एक पूर्व मौजूदा पुस्तकालय का प्रयोग करें।

+0

bobince धन्यवाद। वह वास्तव में था जो मैं बाद में था। – Chez

9

Apache Commons library से उपयोग UrlValidator। बाइनरी पैकेज: http://www.mirrorservice.org/sites/ftp.apache.org/commons/validator/binaries/commons-validator-1.3.1.zip (ज़िप है .jar फ़ाइलें)

उपयोग के उदाहरण ("http", और "https" के वैध योजनाओं के साथ एक UrlValidator का निर्माण):

String[] schemes = {"http","https"}. 
UrlValidator urlValidator = new UrlValidator(schemes); 
if (urlValidator.isValid("ftp://foo.bar.com/")) { 
    System.out.println("url is valid"); 
} else { 
    System.out.println("url is invalid"); 
} 

प्रिंट "url अमान्य है"

यदि इसके बजाय डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग किया जाता है।

UrlValidator urlValidator = new UrlValidator(); 
if (urlValidator.isValid("ftp://foo.bar.com/")) { 
    System.out.println("url is valid"); 
} else { 
    System.out.println("url is invalid"); 
} 

प्रिंट आउट "यूआरएल वैध है"

0

मुझे लगता है कि new URL(yourString) चाल करना होगा: यह करता है, तो यूआरएल अनुरूप नहीं है (यह कहते MalformedURLException बढ़ाने के लिए माना जाता है वास्तव में जावा एपीआई पर तो स्ट्रिंग निर्दिष्ट करता है एक अज्ञात प्रोटोकॉल, लेकिन तुम वैसे भी यह कोशिश कर सकते हैं):

try 
{ 
    new URL(string); 
} catch (MalformedURLException e) { 
    //do whatever 
} 
+3

यूआरएल के साथ समस्या यह है, यह एक देखने के लिए हर बार प्रदर्शन करने का प्रयास करेंगे :( – OscarRyz

+0

हाँ यह सच है, लेकिन और कैसे (regex का उपयोग कर को छोड़कर) आप एक यूआरएल को मान्य कर सकते –

+1

@Shervin: के साथ:। कॉमन्स UrlValidator – BalusC

-1

आप Regular Expressions के माध्यम से "url सत्यापन" इस तरह का कर सकते हैं।

और here वह जगह है जहां आप कुछ अच्छा यूआरएल रेगेक्स प्राप्त कर सकते हैं (इसलिए आपको अपना खुद लिखना नहीं है)।

0

मैं भी लगता है कि आप java.net में URL उपयोग कर सकते हैं

URL url = new URL("www.google.com"); 

एपीआई का कहना है यदि URL अमान्य है public URL(String spec) throws MalformedURLException Parameters: spec - the String to parse as a URL. Throws: MalformedURLException - If the string specifies an unknown protocol.

तो एक अपवाद फेंक दिया है।

+0

यह काम नहीं करता है http।।: // रों tackoverflow.com/questions/1600291/validating-url-in-java/5965755#5965755 – Martin

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