Android में EditText में URL / वेबसाइट का नाम कैसे मान्य करें?


85

मैं इनपुट लेना चाहता हूं, एंड्रॉइड से एक URL या सिर्फ एक वेबसाइट का नाम, www.google.comEditText और उपयोगकर्ता पर Buttonसबमिट करने के लिए उस पर क्लिक करें या जब EditTextफोकस खोता है तो URL मान्य होना चाहिए, जैसे कि यह प्रारूप में है " www.anyurL.com "...

मैं यह कैसे कर सकता हूँ? क्या Android में कोई इनबिल्ट कार्यक्षमता उपलब्ध है?

जवाबों:


275

संक्षिप्त जवाब

WEB_URL पैटर्न का उपयोग पैटर्न क्लास में करें

 Patterns.WEB_URL.matcher(potentialUrl).matches()

यदि URL वैध है और URL अमान्य है तो यह सही लौटेगा ।

लंबा जवाब

Android API स्तर 8 के रूप में एक WEB_URL पैटर्न है। स्रोत का हवाला देते हुए, यह "RFC 3987 के अधिकांश भाग" से मेल खाता है। यदि आप एक निचले एपीआई स्तर को लक्षित करते हैं तो आप स्रोत से पैटर्न को कॉपी कर सकते हैं और इसे अपने आवेदन में शामिल कर सकते हैं। मुझे लगता है कि आप जानते हैं कि पैटर्न और माचिस का उपयोग कैसे किया जाता है, इसलिए मैं यहां अधिक विवरण में नहीं जा रहा हूं।

इसके अलावा वर्ग URLUtil कुछ उपयोगी तरीके प्रदान करता है, जैसे:

विधियों का वर्णन बहुत विस्तृत नहीं है, इसलिए आप शायद स्रोत को देखने और यह पता लगाने में सबसे अच्छे हैं कि कौन सा आपके उद्देश्य को सबसे अच्छा लगता है।

सत्यापन चेक को ट्रिगर करने के लिए कब, कई संभावनाएं हैं: आप EditText कॉलबैक फ़ंक्शन का उपयोग कर सकते हैं

या एक TextWatcher का उपयोग करें , जो मुझे लगता है कि बेहतर होगा।

नीचे दिए गए URL को मान्य करने के लिए URLUtil का उपयोग न करें

 URLUtil.isValidUrl(url)

क्योंकि यह मान्य URL के रूप में "http: //" जैसे तार देता है जो सच नहीं है


16
यदि आप URLUtil के स्रोत को देखते हैं, तो isValidUrl () और isHttpUrl () मूल रूप से startWith ("http: //") के समान हैं, इसलिए इनका उपयोग करने में सावधानी बरतें क्योंकि आपको वे परिणाम नहीं मिल सकते हैं जो आप चाहते हैं। WEB_URL पैटर्न का उपयोग करना बहुत ही बेहतर है जो कि यूआरएल को मान्य करने के लिए अनुकूल है।
डेव

URLUtil.isValidUrl (downloadImageEditText.getText () toString ()।);
प्राग्स

1
लेकिन जहां तक ​​उपयोगकर्ता इनपुट जाता है, उपयोगकर्ता 'http: //' या 'https: //' टाइप करने का प्रयास नहीं करेगा और केवल url के लिए www.google.com या google.com जैसा कुछ लिखेगा, लेकिन इन मामलों को उपरोक्त समाधान द्वारा मान्य नहीं किया जा रहा है, मुझे लगता है कि समाधान को परीक्षक की धारणा को भी शामिल करना होगा।
श्रीकृष्ण

1
CAREFUL: पैटर्न। WB_URL "लोकलहोस्ट" url को नहीं पहचानता है।
आर्टेम नोविकोव

1
पैटर्न। WB_URL नए डोमेन नामों को नहीं पहचानता है। उदाहरण के लिए abc.xyz (https: // as prefix) (वेब ​​यूआरएल ऑफ़ अल्फाबेट)
चिंतन शाह

22
/** 
* This is used to check the given URL is valid or not.
* @param url
* @return true if url is valid, false otherwise.
*/
private boolean isValidUrl(String url) {
    Pattern p = Patterns.WEB_URL;
    Matcher m = p.matcher(url.toLowerCase());
    return m.matches();
}

4
वेब url लोअरकेस में होना चाहिए, अन्यथा पैटर्न गलत लौट रहा है। बस पोस्टिंग, तो यह किसी की मदद कर सकता है ..
praveenb

@ स्निपेट ऊपर दिए गए कोड स्निपेट www.website को मान्य है, .com या .in के बिना यह सच है। क्या आप बता सकते हैं कि इस परिदृश्य के लिए सत्यापन कैसे किया जाए?
पार्थ पटेल

क्यों वास्तव में यह लोअरकेस होना चाहिए? कृपया यह न कहें कि "यह आवश्यक है", यह भी बताएं कि इसकी आवश्यकता क्यों है!
कार्स्टन हेजमैन

4

मामले में, आपके यूनिटटेस्ट में, आपको इसके बजाय NullPointerExceptionउपयोग मिला ।PatternsCompatPatterns

fun isFullPath(potentialUrl: String): Boolean {
    return PatternsCompat.WEB_URL.matcher(potentialUrl.toLowerCase(Locale.CANADA)).matches()
}

इसके अलावा, मैंने महसूस किया कि trueजब मैं इसे पास करता हूं तो यह तरीका वापस आ जाता है Photo.jpg। मेरे उम्मीद है false। इसलिए, मैं ऊपर के बजाय निम्नलिखित विधि का प्रस्ताव करता हूं।

fun isFullPath(potentialUrl: String): Boolean {
    try {
        URL(potentialUrl).toURI()
        return true
    } catch (e: Exception) {
        e.printStackTrace()
    }
    return false
}

इसने बस मेरा दिन बना दिया। धन्यवाद!
स्पार्कली_फ्रॉग

परीक्षण चलाने के लिए PatternsCompat का उपयोग करने के बारे में टिप के लिए धन्यवाद।
आदि B

2

URLUtil.isValidUrl एपि लेवल 1 के बाद से मौजूद है।


10
यदि आप इसके लिए कोड को देखते हैं तो यह सही उत्तर नहीं होना चाहिए । यह केवल URL की प्रारंभिक योजना की जाँच कर रहा है, यह नहीं कि पूरा URL मान्य है। यह संभवतः सबसे खराब URL मान्यताओं में से एक है जिसे मैंने देखा है
माइक

1

अपनी वेबसाइट के सत्यापन पर इस regex का उपयोग करें

String WebUrl = "^((ftp|http|https):\\/\\/)?(www.)?(?!.*(ftp|http|https|www.))[a-zA-Z0-9_-]+(\\.[a-zA-Z]+)+((\\/)[\\w#]+)*(\\/\\w+\\?[a-zA-Z0-9_]+=\\w+(&[a-zA-Z0-9_]+=\\w+)*)?$";


//TODO for website validation

private boolean isValidate() 
{

        String website = txtWebsite.getText().toString().trim();
        if (website.trim().length() > 0) {
            if (!website.matches(WebUrl)) {
                //validation msg
                return false;
            }
        }
        return true;

}

-4

या आप बस अच्छे पुराने का उपयोग कर सकते हैं Regex

Pattern urlRegex = Pattern.compile("((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:ww‌​w.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?‌​(?:[\w]*))?)");

मैं यह नहीं कह रहा हूं कि Patterns.WEB_URLयह बुरा है, यह सिर्फ यह परीक्षण करना आसान बनाता है कि क्या मेल खाता है और क्या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.