একটি ইউআরএল যাচাই করা একটি জটিল কাজ is এটি একটি খুব বিস্তৃত অনুরোধ।
আপনি ঠিক কি করতে চান? আপনি কি ইউআরএল, অস্তিত্ব বা কিসের বিন্যাসটি বৈধ করতে চান? আপনি যা করতে চান তার উপর নির্ভর করে বিভিন্ন সম্ভাবনা রয়েছে।
একটি নিয়মিত প্রকাশটি ইউআরএলের ফর্ম্যাটটিকে বৈধতা দিতে পারে। তবে একটি জটিল নিয়মিত অভিব্যক্তিও আপনি বৈধ ইউআরএল নিয়ে কাজ করছেন তা নিশ্চিত করতে পারে না।
উদাহরণস্বরূপ, আপনি যদি একটি সাধারণ নিয়মিত অভিব্যক্তি গ্রহণ করেন তবে এটি সম্ভবত নিম্নলিখিত হোস্টটিকে প্রত্যাখ্যান করবে
http://invalid##host.com
কিন্তু এটি অনুমতি দেবে
http://invalid-host.foo
এটি একটি বৈধ হোস্ট, তবে বৈধ ডোমেন নয় যদি আপনি বিদ্যমান টিএলডি বিবেচনা করেন। প্রকৃতপক্ষে, সমাধানটি কাজ করবে যদি আপনি হোস্টনামটি বৈধ করতে চান, ডোমেন নয় কারণ নিম্নলিখিতটি একটি বৈধ হোস্টনেম
http://host.foo
পাশাপাশি নিম্নলিখিতটি
http://localhost
এখন, আমি আপনাকে কিছু সমাধান দেই।
আপনি যদি কোনও ডোমেইন যাচাই করতে চান তবে আপনাকে নিয়মিত প্রকাশের কথা ভুলে যাওয়া দরকার। এই মুহুর্তে সর্বোত্তম সমাধানটি হ'ল পাবলিক প্রত্যয় তালিকা, মজিলার দ্বারা রক্ষণাবেক্ষণ করা একটি তালিকা। আমি পাবলিক প্রত্যয় তালিকার বিপরীতে ডোমেনগুলি বিশ্লেষণ ও বৈধ করতে একটি রুবি গ্রন্থাগার তৈরি করেছি এবং এটিকে পাবলিকসফিক্স বলে ।
আপনি যদি কোনও ইউআরআই / ইউআরএলের ফর্ম্যাটটি বৈধতা দিতে চান তবে আপনি নিয়মিত ভাব প্রকাশ করতে চাইতে পারেন। এর জন্য অনুসন্ধানের পরিবর্তে বিল্ট-ইন রুবি URI.parse
পদ্ধতিটি ব্যবহার করুন ।
require 'uri'
def valid_url?(uri)
uri = URI.parse(uri) && !uri.host.nil?
rescue URI::InvalidURIError
false
end
এমনকি আপনি এটিকে আরও সীমাবদ্ধ করার সিদ্ধান্ত নিতে পারেন। উদাহরণস্বরূপ, আপনি যদি URL টি এইচটিটিপি / এইচটিটিপিএস URL হতে চান তবে আপনি বৈধতাটিকে আরও নির্ভুল করে তুলতে পারেন।
require 'uri'
def valid_url?(url)
uri = URI.parse(url)
uri.is_a?(URI::HTTP) && !uri.host.nil?
rescue URI::InvalidURIError
false
end
অবশ্যই, আপনি এই পদ্ধতিতে প্রয়োগ করতে পারেন এমন অনেকগুলি উন্নতি রয়েছে, যার মধ্যে কোনও পথ বা স্কিম পরীক্ষা করা রয়েছে।
সর্বশেষে তবে সর্বনিম্ন নয়, আপনি এই কোডটিকে কোনও বৈধকরণকারী হিসাবেও প্যাকেজ করতে পারেন:
class HttpUrlValidator < ActiveModel::EachValidator
def self.compliant?(value)
uri = URI.parse(value)
uri.is_a?(URI::HTTP) && !uri.host.nil?
rescue URI::InvalidURIError
false
end
def validate_each(record, attribute, value)
unless value.present? && self.class.compliant?(value)
record.errors.add(attribute, "is not a valid HTTP URL")
end
end
end
# in the model
validates :example_attribute, http_url: true