অ্যান্ড্রয়েডের এডিটেক্সটে কোনও ইউআরএল / ওয়েবসাইটের নামকে কীভাবে বৈধতা দেবেন?


86

আমি ইনপুট নিতে চাই, একটি ইউআরএল বা ওয়েব সাইটের মতো একটি ওয়েবসাইটের নাম, www.google.com যেমন EditTextঅ্যান্ড্রয়েড থেকে এবং ব্যবহারকারীরা Buttonজমা দেওয়ার জন্য ক্লিক করুন বা যখন EditTextফোকাসটি হারাবে তখন URL টি যাচাই করা উচিত, যেমন এটি ফর্ম্যাটে রয়েছে " www.anyURL.com "...

কিভাবে আমি এটি করতে পারব? অ্যান্ড্রয়েডে কি কোনও ইনবিল্ট কার্যকারিতা উপলব্ধ?

উত্তর:


279

সংক্ষিপ্ত উত্তর

প্যাটার্নস ক্লাসে WEB_URL প্যাটার্ন ব্যবহার করুন

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

URL টি বৈধ এবং মিথ্যা যদি URL অবৈধ হয় তবে এটি সত্য হবে ।

দীর্ঘ উত্তর

অ্যান্ড্রয়েড এপিআই লেভেল 8 হিসাবে একটি WEB_URL প্যাটার্ন রয়েছে। উত্সটি উদ্ধৃত করে, এটি আরএফসি 3987 এর বেশিরভাগ অংশের সাথে [স্প্যানিশ ভাষায়] মেলে "। আপনি যদি নীচের এপিআই স্তরটিকে লক্ষ্য করে থাকেন তবে আপনি উত্স থেকে প্যাটার্নটি অনুলিপি করতে পারেন এবং এটি আপনার অ্যাপ্লিকেশনটিতে অন্তর্ভুক্ত করতে পারেন। আমি ধরে নিচ্ছি যে আপনি কীভাবে নিদর্শন এবং ম্যাথারগুলি ব্যবহার করতে জানেন, তাই আমি এখানে আরও বিশদে যাচ্ছি না।

এছাড়াও ক্লাস URL টি কিছু কার্যকর পদ্ধতি সরবরাহ করে যেমন:

পদ্ধতির বিবরণগুলি খুব বিস্তৃত নয়, অতএব আপনি সম্ভবত উত্সটি দেখে এবং আপনার উদ্দেশ্যটি কোনটির সাথে সবচেয়ে বেশি উপযুক্ত তা নির্ধারণ করা ভাল।

যাচাইকরণের চেকটি কখন ট্রিগার করবেন, একাধিক সম্ভাবনা রয়েছে: আপনি এডিটেক্সট কলব্যাক ফাংশন ব্যবহার করতে পারেন

বা একটি টেক্সট ওয়াচার ব্যবহার করুন , যা আমার মনে হয় আরও ভাল।

ইউআরএলটি ব্যবহার করবেন না নীচের মতো ইউআরএলটি বৈধ করতে।

 URLUtil.isValidUrl(url)

কারণ এটি "http: //" এর মতো স্ট্রিংকে বৈধ URL হিসাবে দেয় যা সত্য নয়


16
আপনি যদি ইউআরএলটিউলের উত্সটি দেখেন তবে, ইসভালিডআরল () এবং এইচটিপিআরএল () মূলত স্টার্টওয়াথের সাথে একই ("http: //") তাই আপনার ব্যবহারের ফলাফলগুলি নাও পেতে পারেন তাই এগুলি ব্যবহারে সতর্ক থাকুন। WEB_URL প্যাটার্ন ব্যবহার করা ইউআরএলগুলি বৈধ করার জন্য আরও বেশি উপযুক্ত।
ডেভ

URLUtil.isValidUrl (ডাউনলোড ইমেজএডিটটেক্সট.জেটটেক্সট ()। টু স্ট্রিং ());
প্রাগস

4
তবে যতক্ষণ না ব্যবহারকারী ইনপুট যায়, ব্যবহারকারী 'http: //' বা 'https: //' টাইপ করার চেষ্টা করবে না এবং কেবল একটি ইউআরএল জন্য www.google.com বা এমনকি গুগল.কম এর মতো কিছু লিখবে, তবে এই কেসগুলি উপরের সমাধান দ্বারা বৈধ হয়ে উঠছে না, আমার ধারণা, সমাধানটির পরীক্ষকটির উপলব্ধিও অন্তর্ভুক্ত করা উচিত।
শ্রী কৃষ্ণ

4
যত্নশীল: প্যাটার্নস। WEB_URL "লোকালহোস্ট" ইউআরএলকে স্বীকৃতি দেয় না।
আর্টেম নোভিকভ

4
প্যাটার্নস। WEB_URL নতুন ডোমেন নামগুলি স্বীকৃতি দেয় না। যেমন abc.xyz (https: // উপসর্গ হিসাবে) (বর্ণমালার ওয়েব ইউআরএল)
চিন্তন শাহ

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
ওয়েব ইউআরএল অবশ্যই ছোট হাতের মধ্যে থাকতে হবে, অন্যথায় প্যাটার্নটি মিথ্যা প্রত্যাবর্তন করবে। কেবল পোস্ট করা, যাতে এটি
কারওর পক্ষে

উপরোক্ত কোড স্নিপেট www.website .com বা .in ছাড়া বৈধ, এটি সত্য প্রত্যাবর্তন করে gives আপনি কি এই দৃশ্যের বৈধতা তৈরি করতে পারেন দয়া করে বলতে পারেন?
পার্থ প্যাটেল

কেন এটি অবশ্যই ছোট হাতের হতে হবে? দয়া করে কেবল "এটি প্রয়োজন" বলবেন না, এটি কেন প্রয়োজন তাও ব্যাখ্যা করুন!
কার্স্টেন হেগম্যান

4

ক্ষেত্রে, আপনার UnitTest, আপনি পেয়েছিলাম NullPointerExceptionতারপর ব্যবহার PatternsCompatপরিবর্তে Patterns

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
}

এটি আমার দিনকে সবেমাত্র তৈরি করেছে। ধন্যবাদ!
স্পার্কলি_ফ্রোগ

পরীক্ষা চালানোর জন্য প্যাটার্নসকম্যাট ব্যবহার সম্পর্কে পরামর্শের জন্য ধন্যবাদ Thanks
আদি বি

2

URLUtil.isValidUrl এপিআই স্তর 1 থেকে বিদ্যমান থাকার কারণে এটি কাজ করবে।


10
আপনি যদি এর জন্য কোডটি দেখেন তবে এটি সঠিক উত্তর হওয়া উচিত নয় । এটি কেবল URL টির প্রাথমিক স্কিমটি পরীক্ষা করছে, পুরো URL টি বৈধ নয়। এটি সম্ভবত আমি দেখেছি এমন সবচেয়ে খারাপ ইউআরএল বৈধতাগুলির মধ্যে একটি
মাইক

1

আপনার ওয়েবসাইটের বৈধতাতে এই রেজেক্সটি ব্যবহার করুন

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এটি খারাপ বলছি না , কেবল এটি কী মিলছে এবং কী নয় তা পরীক্ষা করা সহজ করে তোলে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.