জন্য মেলিং তালিকাগুলি ভ্যালিডেশন । (আমি 4.1.6 কিল ব্যবহার করি)
আমি আমার regexp পেয়েছিলাম এখানে । এটি একটি সম্পূর্ণ সম্পূর্ণ বলে মনে হচ্ছে, এবং এটি প্রচুর সংমিশ্রণের বিরুদ্ধে পরীক্ষা করা হয়েছে। আপনি এই পৃষ্ঠায় ফলাফল দেখতে পারেন।
আমি এটিকে সামান্য পরিবর্তিত করে একটি রুবি রিজেক্সেপ এনেছি এবং এটি আমার মধ্যে রেখেছি lib/validators/email_list_validator.rb
কোডটি এখানে:
require 'mail'
class EmailListValidator < ActiveModel::EachValidator
# Regexp source: https://fightingforalostcause.net/content/misc/2006/compare-email-regex.php
EMAIL_VALIDATION_REGEXP = Regexp.new('\A(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))\z', true)
def validate_each(record, attribute, value)
begin
invalid_emails = Mail::AddressList.new(value).addresses.map do |mail_address|
# check if domain is present and if it passes validation through the regex
(mail_address.domain.present? && mail_address.address =~ EMAIL_VALIDATION_REGEXP) ? nil : mail_address.address
end
invalid_emails.uniq!
invalid_emails.compact!
record.errors.add(attribute, :invalid_emails, :emails => invalid_emails.to_sentence) if invalid_emails.present?
rescue Mail::Field::ParseError => e
# Parse error on email field.
# exception attributes are:
# e.element : Kind of element that was wrong (in case of invalid addres it is Mail::AddressListParser)
# e.value: mail adresses passed to parser (string)
# e.reason: Description of the problem. A message that is not very user friendly
if e.reason.include?('Expected one of')
record.errors.add(attribute, :invalid_email_list_characters)
else
record.errors.add(attribute, :invalid_emails_generic)
end
end
end
end
এবং আমি এটি মডেলটিতে এটি ব্যবহার করি:
validates :emails, :presence => true, :email_list => true
এটি বিভিন্ন বিভাজক এবং সিন্থ্যাক্স সহ এই জাতীয় মেলিং তালিকাকে বৈধতা দেবে:
mail_list = 'John Doe <john@doe.com>, chuck@schuld.dea.th; David G. <david@pink.floyd.division.bell>'
এই রেজিএক্সপ্যাক্স ব্যবহার করার আগে, আমি ব্যবহার করেছি Devise.email_regexp
, তবে এটি একটি খুব সাধারণ রেজিপ এক্স এবং আমার প্রয়োজনীয় সমস্ত কেস পাওয়া যায় নি। কিছু ইমেল বিচ্ছিন্ন হয়েছে।
আমি ওয়েব থেকে অন্যান্য রেগেক্সপ চেষ্টা করেছিলাম তবে এখন পর্যন্ত এটি সেরা ফলাফল পেয়েছে। আশা করি এটি আপনার ক্ষেত্রে সহায়তা করবে।