কোনও স্ট্রিং একটি বৈধ ইমেল ঠিকানা যাচাই করার জন্য সবচেয়ে মার্জিত কোডটি কী?
কোনও স্ট্রিং একটি বৈধ ইমেল ঠিকানা যাচাই করার জন্য সবচেয়ে মার্জিত কোডটি কী?
উত্তর:
এই সম্পর্কে কি?
bool IsValidEmail(string email)
{
try {
var addr = new System.Net.Mail.MailAddress(email);
return addr.Address == email;
}
catch {
return false;
}
}
পরিষ্কার করার জন্য, প্রশ্নটি জিজ্ঞাসা করছে যে কোনও নির্দিষ্ট স্ট্রিং কোনও ইমেল ঠিকানাটির বৈধ উপস্থাপনা কিনা, কোনও ইমেল ঠিকানা কোনও বার্তা প্রেরণের বৈধ গন্তব্য কিনা তা নয়। তার জন্য, একমাত্র আসল উপায়টি নিশ্চিত করার জন্য একটি বার্তা প্রেরণ করা।
নোট করুন যে ইমেল ঠিকানাগুলি আপনি প্রথম অনুমানের চেয়ে বেশি ক্ষমা করবেন। এগুলি পুরোপুরি বৈধ ফর্ম:
বেশিরভাগ ব্যবহারের ক্ষেত্রে, একটি মিথ্যা "অবৈধ" আপনার ব্যবহারকারীদের জন্য এবং ভবিষ্যতের প্রুফিং মিথ্যা "বৈধ" এর চেয়ে অনেক খারাপ। এখানে একটি নিবন্ধ যা এই প্রশ্নের গৃহীত উত্তর হিসাবে ব্যবহৃত হত (সেই উত্তরটি মুছে ফেলা হয়েছে)। এটিতে আরও কীভাবে সমস্যা সমাধান করা যায় তার আরও অনেকগুলি বিশদ এবং কিছু ধারণা রয়েছে।
স্যানিটি চেক সরবরাহ করা এখনও ব্যবহারকারীর অভিজ্ঞতার জন্য ভাল ধারণা। ই-মেইল ঠিকানাটি বৈধ বলে ধরে নেওয়া, আপনি পরিচিত শীর্ষ স্তরের ডোমেনগুলি সন্ধান করতে পারেন, একটি এমএক্স রেকর্ডের জন্য ডোমেনটি পরীক্ষা করতে পারেন, সাধারণ ডোমেন নামগুলি (gmail.cmo) থেকে বানান ত্রুটিগুলি পরীক্ষা করতে পারেন Then তারপরে ব্যবহারকারীকে একটি সতর্কতা উপস্থাপন করুন "হ্যাঁ, আমার মেইল সার্ভারটি সত্যই একটি ইমেল ঠিকানা হিসাবে অনুমতি দেয় say" বলার সুযোগ।
ব্যবসায়ের যুক্তি হিসাবে ব্যতিক্রম হ্যান্ডলিং ব্যবহার করার ক্ষেত্রে, আমি সম্মত যে এটি এড়ানো একটি জিনিস। তবে এটি সেই ক্ষেত্রে একটি যেখানে সুবিধা ও স্পষ্টতা ডগমা ছাড়িয়ে যেতে পারে।
এছাড়াও, আপনি যদি ই-মেইল ঠিকানার সাথে অন্য কিছু করেন তবে এটি সম্ভবত কোনও মেইল অ্যাড্রেস-এ পরিণত করা জড়িত হতে পারে। এমনকি আপনি যদি এই সঠিক ফাংশনটি ব্যবহার না করেন তবে আপনি সম্ভবত একই প্যাটার্নটি ব্যবহার করতে চাইবেন। আপনি বিভিন্ন ব্যতিক্রম : নাল, খালি বা অবৈধ ফর্ম্যাটটি ধরে নির্দিষ্ট ধরণের ব্যর্থতার জন্যও পরীক্ষা করতে পারেন ।
স্টুয়ার্টের মন্তব্যে, এটি সর্বদা সত্য ফিরে আসার পরিবর্তে চূড়ান্ত ঠিকানাটিকে মূল স্ট্রিংয়ের সাথে তুলনা করে। মেলএড্রেস স্পেস সহ একটি স্ট্রিংকে "প্রদর্শনের নাম" এবং "ঠিকানা" অংশগুলিতে পার্স করার চেষ্টা করে, সুতরাং আসল সংস্করণটি মিথ্যা ইতিবাচক প্রত্যাবর্তন করেছিল।
--- আরও পড়া ---
System.Net.Mail
মেইল প্রেরণের জন্য ক্লাসগুলি ব্যবহার করছেন যদি এটি সেরা উত্তর , আপনি সম্ভবত নেট। নেট ব্যবহার করছেন। আমরা এই ধরণের বৈধতাটি কেবলমাত্র এই কারণে ব্যবহার করার সিদ্ধান্ত নিয়েছি যে আমাদের ইমেল ঠিকানাগুলি গ্রহণ করার কোনও মানে নেই - এমনকি বৈধ ঠিকানাও - যেটিতে আমরা মেল পাঠাতে পারি না।
IsValidEmail("this is not valid@email$com");
এটি একটি পুরানো প্রশ্ন, তবে আমি সাম্প্রতিকতমগুলি সহ এসও-তে খুঁজে পেয়েছি এমন সমস্ত উত্তরগুলির একই উত্তর দেওয়া হবে। তবে। নেট 4.5 / এমভিসি 4-তে আপনি সিস্টেম.কম্পোনমোডেল.ডাটাঅনোটেশনগুলি থেকে [ইমেল অ্যাড্রেস] টিকা যোগ করে কোনও ফর্মের সাথে ইমেল ঠিকানা বৈধতা যুক্ত করতে পারেন, তাই আমি ভাবছিলাম যে আমি কেন কেবল বিল্ট-ইন কার্যকারিতাটি ব্যবহার করতে পারছি না। সাধারণভাবে নেট।
এটি কাজ করে বলে মনে হচ্ছে এবং আমার কাছে মোটামুটি মার্জিত বলে মনে হচ্ছে:
using System.ComponentModel.DataAnnotations;
class ValidateSomeEmails
{
static void Main(string[] args)
{
var foo = new EmailAddressAttribute();
bool bar;
bar = foo.IsValid("someone@somewhere.com"); //true
bar = foo.IsValid("someone@somewhere.co.uk"); //true
bar = foo.IsValid("someone+tag@somewhere.net"); //true
bar = foo.IsValid("futureTLD@somewhere.fooo"); //true
bar = foo.IsValid("fdsa"); //false
bar = foo.IsValid("fdsa@"); //false
bar = foo.IsValid("fdsa@fdsa"); //false
bar = foo.IsValid("fdsa@fdsa."); //false
//one-liner
if (new EmailAddressAttribute().IsValid("someone@somewhere.com"))
bar = true;
}
}
EmailAddressAttribute
কম অনুমতিযোগ্য System.Net.Mail.MailAddress
- উদাহরণস্বরূপ, MailAddress
একটি টিএলডি-র জন্য একটি ঠিকানা গ্রহণ করে। আপনার যতটা সম্ভব অনুমতিপ্রাপ্ত হওয়ার প্রয়োজন হলে কিছু মনে রাখবেন।
foo.IsValid(null);
আয় true
।
আমি এই একক লাইনার পদ্ধতিটি ব্যবহার করি যা আমার পক্ষে কাজ করে-
using System.ComponentModel.DataAnnotations;
public bool IsValidEmail(string source)
{
return new EmailAddressAttribute().IsValid(source);
}
মন্তব্যগুলি অনুসারে, source
(ইমেল ঠিকানা) শূন্য হলে এটি "ব্যর্থ" হবে ।
public static bool IsValidEmailAddress(this string address) => address != null && new EmailAddressAttribute().IsValid(address);
public static Boolean IsValidMailAddress(this String pThis) => pThis == null ? false : new EmailAddressAttribute().IsValid(pThis);
public static bool IsValidEmailAddress(this string address) => address != null && new EmailAddressAttribute().IsValid(address);
false
জন্য নীরবে ফিরে আসা উচিত । কেন আমি (আরও ভাল ভাল) ++, সংস্করণ উত্থাপন করা যে: public static bool IsValidEmailAddress(this string address) => new EmailAddressAttribute().IsValid(address ?? throw new ArgumentNullException());
। আমি এখন গিয়ে আরও উন্নততর সংস্করণবিদদের সংস্কারকৃত চার্চটি খুঁজে পেয়েছি।
.NET 4.5 যোগ করেছে System.ComponentModel.DataAnnotations.EmailAddressAttribute
আপনি ইমেল অ্যাড্রেসঅ্যাট্রিবিউটের উত্সটি ব্রাউজ করতে পারেন , এটি অভ্যন্তরীণভাবে এটি ব্যবহার করে এমন রেজেক্স:
const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$";
RegexOptions.IgnoreCase
কারণ এই প্যাটার্নটি সুস্পষ্টভাবে মূলধন পত্রগুলিকে অনুমতি দেয় না!
আমি # 1 থেকে ফিলের উত্তর নিয়ে এই ক্লাসটি তৈরি করেছি। এটিকে কল করুন:bool isValid = Validator.EmailIsValid(emailString);
এখানে ক্লাস:
using System.Text.RegularExpressions;
public static class Validator
{
static Regex ValidEmailRegex = CreateValidEmailRegex();
/// <summary>
/// Taken from http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx
/// </summary>
/// <returns></returns>
private static Regex CreateValidEmailRegex()
{
string validEmailPattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"
+ @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
+ @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
return new Regex(validEmailPattern, RegexOptions.IgnoreCase);
}
internal static bool EmailIsValid(string emailAddress)
{
bool isValid = ValidEmailRegex.IsMatch(emailAddress);
return isValid;
}
}
ব্যক্তিগতভাবে, আমি বলব যে আপনার কেবল সেখানে একটি @ চিহ্ন রয়েছে কিনা তা নিশ্চিত হওয়া উচিত। অক্ষর। আপনি বিভিন্ন ধরণের সঠিকতা ব্যবহার করতে পারেন এমন অনেকগুলি রেজিক্স রয়েছে, তবে আমি মনে করি এগুলির মধ্যে বেশিরভাগটি বৈধ ইমেল ঠিকানা ছেড়ে দেয় বা অবৈধগুলি দিয়ে যায়। লোকেরা যদি কোনও নকল ইমেল ঠিকানা রাখতে চায় তবে তারা একটি নকল ঠিকানা রাখবে। আপনার যদি ইমেল ঠিকানাটি বৈধ, এবং সেই ইমেল ঠিকানাটির মালিকানাটি সেই ব্যক্তির নিয়ন্ত্রণে রয়েছে কিনা তা যাচাই করা দরকার হলে আপনাকে একটি বিশেষ কোডেড লিঙ্ক সহ তাদের একটি ইমেল প্রেরণ করতে হবে যাতে তারা সত্যতা নিশ্চিত করতে পারে যে এটি সত্যিকারের ঠিকানা।
আমি মনে করি সবচেয়ে ভাল উপায় অনুসরণ হিসাবে:
public static bool EmailIsValid(string email)
{
string expression = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
if (Regex.IsMatch(email, expression))
{
if (Regex.Replace(email, expression, string.Empty).Length == 0)
{
return true;
}
}
return false;
}
আপনি একটি সাধারণ শ্রেণিতে এই স্থির ফাংশন রাখতে পারেন।
সংক্ষিপ্ত এবং নির্ভুল কোড
string Email = txtEmail.Text;
if (Email.IsValidEmail())
{
//use code here
}
public static bool IsValidEmail(this string email)
{
string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)" + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
return regex.IsMatch(email);
}
সর্বাধিক মার্জিত উপায় হ'ল নেট পদ্ধতিতে অন্তর্নির্মিত।
এই পদ্ধতিগুলি:
চেষ্টা ও পরীক্ষা করা হয়। এই পদ্ধতিগুলি আমার নিজের পেশাদার প্রকল্পগুলিতে ব্যবহৃত হয়।
অভ্যন্তরীণভাবে নিয়মিত ভাব প্রকাশ করুন যা নির্ভরযোগ্য এবং দ্রুত।
মাইক্রোসফ্ট সি সি # এর জন্য তৈরি। চাকাটি পুনরায় উদ্ভাবনের দরকার নেই।
একটি বুল রেজাল্ট ফিরিয়ে দিন। সত্যিকারের অর্থ ইমেলটি বৈধ।
.NET 4.5 এবং আরও বেশি ব্যবহারকারীদের জন্য
আপনার প্রকল্পে এই রেফারেন্স যুক্ত করুন:
System.ComponentModel.DataAnnotations
এখন আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:
(new EmailAddressAttribute().IsValid("youremailhere@test.test"));
ব্যবহারের উদাহরণ
এখানে কিছু পদ্ধতি ঘোষণা করার জন্য রয়েছে:
protected List<string> GetRecipients() // Gets recipients from TextBox named `TxtRecipients`
{
List<string> MethodResult = null;
try
{
List<string> Recipients = TxtRecipients.Text.Replace(",",";").Replace(" ", "").Split(';').ToList();
List<string> RecipientsCleaned = new List<string>();
foreach (string Recipient in RecipientsCleaned)
{
if (!String.IsNullOrWhiteSpace(Recipient))
{
RecipientsNoBlanks.Add(Recipient);
}
}
MethodResult = RecipientsNoBlanks;
}
catch//(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
public static bool IsValidEmailAddresses(List<string> recipients)
{
List<string> InvalidAddresses = GetInvalidEmailAddresses(recipients);
return InvalidAddresses != null && InvalidAddresses.Count == 0;
}
public static List<string> GetInvalidEmailAddresses(List<string> recipients)
{
List<string> MethodResult = null;
try
{
List<string> InvalidEmailAddresses = new List<string>();
foreach (string Recipient in recipients)
{
if (!(new EmailAddressAttribute().IsValid(Recipient)) && !InvalidEmailAddresses.Contains(Recipient))
{
InvalidEmailAddresses.Add(Recipient);
}
}
MethodResult = InvalidEmailAddresses;
}
catch//(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
... এবং কোডগুলি তাদের কার্যকরভাবে দেখায়:
List<string> Recipients = GetRecipients();
bool IsValidEmailAddresses = IsValidEmailAddresses(Recipients);
if (IsValidEmailAddresses)
{
//Emails are valid. Your code here
}
else
{
StringBuilder sb = new StringBuilder();
sb.Append("The following addresses are invalid:");
List<string> InvalidEmails = GetInvalidEmailAddresses(Recipients);
foreach (string InvalidEmail in InvalidEmails)
{
sb.Append("\n" + InvalidEmail);
}
MessageBox.Show(sb.ToString());
}
এছাড়াও, এই উদাহরণ:
;
।বিকল্প,। নেট এর সংস্করণ ব্যবহারকারীদের জন্য 4.5 এর চেয়ে কম করুন
এমন পরিস্থিতিতে যেখানে নেট 4.5 পাওয়া যায় না, আমি নিম্নলিখিত সমাধানটি ব্যবহার করি:
বিশেষত, আমি ব্যবহার:
public static bool IsValidEmailAddress(string emailAddress)
{
bool MethodResult = false;
try
{
MailAddress m = new MailAddress(emailAddress);
MethodResult = m.Address == emailAddress;
}
catch //(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
public static List<string> GetInvalidEmailAddresses(List<string> recipients)
{
List<string> MethodResult = null;
try
{
List<string> InvalidEmailAddresses = new List<string>();
foreach (string Recipient in recipients)
{
if (!IsValidEmail(Recipient) && !InvalidEmailAddresses.Contains(Recipient))
{
InvalidEmailAddresses.Add(Recipient);
}
}
MethodResult = InvalidEmailAddresses;
}
catch //(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
সত্য কথা বলতে গেলে, প্রোডাকশন কোডে, সেরা আমি যা করি তা @
প্রতীকটি পরীক্ষা করা ।
আমি কখনই ইমেল সম্পূর্ণরূপে যাচাই করা যায় না। আপনি কি জানেন আমি কীভাবে এটি সত্যই বৈধ ছিল? যদি এটি পাঠানো হয়। যদি তা না হয় তবে এটি খারাপ, যদি তা হয় তবে জীবন ভাল। এটাই আমার জানা দরকার।
আমি এই রেজেক্সটিকে কেবলমাত্র @ চিহ্ন ছাড়াও আরও কিছু পরীক্ষা করার জন্য এবং অদ্ভুত প্রান্তের মামলাগুলি গ্রহণ করার মধ্যে একটি ভাল বাণিজ্য বলে মনে করি:
^[^@\s]+@[^@\s]+(\.[^@\s]+)+$
এটি আপনাকে কমপক্ষে @ চিহ্নের চারপাশে কিছু রাখতে এবং কমপক্ষে একটি সাধারণ দেখায় এমন ডোমেন তৈরি করবে।
bob@companyinternal
?
ইমেল ঠিকানার বৈধতা যতটা সহজ মনে হয় তত সহজ নয়। কেবলমাত্র একটি নিয়মিত অভিব্যক্তি ব্যবহার করে কোনও ইমেল ঠিকানা সম্পূর্ণরূপে বৈধতা দেওয়া তাত্ত্বিকভাবে অসম্ভব।
এ সম্পর্কিত আমার আলোচনার জন্য এ সম্পর্কে আমার ব্লগ পোস্ট এবং FParsec ব্যবহার করে একটি F # বাস্তবায়ন দেখুন। [/ shameless_plug]
এখানে আমার উত্তর - ফিলের সমাধানটি "someone@q.com" এর মতো একক অক্ষরের ডোমেনগুলির জন্য ব্যর্থ। বিশ্বাস করুন বা না করুন, এটি ব্যবহৃত =) (উদাহরণস্বরূপ, শতাব্দী লিঙ্কে যায়)।
ফিলের উত্তরটি কেবলমাত্র পিসিআরই স্ট্যান্ডার্ডের সাথে কাজ করছে ... তাই সি # এটি গ্রহণ করবে, তবে জাভাস্ক্রিপ্ট বোমা ফেলছে। এটি জাভাস্ক্রিপ্টের জন্য খুব জটিল। সুতরাং আপনি এমভিসি বৈধতা বৈশিষ্ট্যের জন্য ফিলের সমাধান ব্যবহার করতে পারবেন না।
এই আমার রেজেক্স। এটি এমভিসি বৈধতা বৈশিষ্ট্যগুলির সাথে দুর্দান্তভাবে কাজ করবে।
- @ এর আগে সমস্ত কিছু সরল করা হয়েছে, যাতে কমপক্ষে জাভাস্ক্রিপ্ট কাজ করবে। যতক্ষণ না এক্সচেঞ্জ সার্ভার আমাকে 5.1.3 দেয় না আমি এখানে বৈধতা শিথিল করছি। - @ এর পরে সমস্ত কিছু হ'ল ফিলের সমাধান হ'ল একক অক্ষরের ডোমেনগুলির জন্য পরিবর্তিত।
public const string EmailPattern =
@"^\s*[\w\-\+_']+(\.[\w\-\+_']+)*\@[A-Za-z0-9]([\w\.-]*[A-Za-z0-9])?\.[A-Za-z][A-Za-z\.]*[A-Za-z]$";
System.net.mail মেলমেসেজ () ব্যবহার করার পরামর্শ দেওয়ার জন্য লোকেরা জিনিসটি নমনীয়। অবশ্যই, সি # ইমেলটি স্বীকার করবে, তবে আপনি ইমেল প্রেরণের চেষ্টা করার সাথে সাথে এক্সচেঞ্জ সার্ভার 5.1.3 রানটাইম ত্রুটি সহ বোমা ফাটিয়ে দেবে।
basket@ball
বৈধ ইমেল ঠিকানা হিসাবে গ্রহণ করে সঠিক উত্তর এবং সেই সাথে এই সমস্ত উন্নতি অর্জন করেছে। যাই হোক ধন্যবাদ!
আপনি যদি সত্যিই এবং আমার অর্থ সত্যই কোনও ইমেল ঠিকানা বৈধ কিনা তা জানতে চান ... মেল এক্সচেঞ্জারকে এটি প্রমাণ করতে বলুন, কোনও রেজেক্সের প্রয়োজন নেই। অনুরোধ করা হলে আমি কোডটি সরবরাহ করতে পারি।
সাধারণ পদক্ষেপগুলি নিম্নরূপ: 1. ইমেল ঠিকানার কোনও ডোমেন নাম অংশ আছে? (@> 0 এর সূচক) 2. কোনও ডিএনএস কোয়েরি ব্যবহার করে জিজ্ঞাসা করুন যে ডোমেনের কোনও মেইল এক্সচেঞ্জার রয়েছে কিনা 3. মেল এক্সচেঞ্জারটিতে টিসিপি সংযোগ খুলুন the. এসএমটিপি প্রোটোকল ব্যবহার করে, প্রাপ্তি হিসাবে ইমেল ঠিকানাটি ব্যবহার করে সার্ভারে একটি বার্তা খুলুন। সার্ভারের প্রতিক্রিয়া পার্স করুন। The. বার্তাটি যদি আপনি এটিকে এ পর্যন্ত তৈরি করেন তবে প্রস্থান করুন, সবকিছু ভাল।
এটি যেমন আপনি কল্পনা করতে পারেন, খুব ব্যয়বহুল সময় এবং এসএমটিপি-র উপর নির্ভর করে তবে এটি কার্যকর হয়।
সাধারণভাবে বলতে গেলে, ইমেল ঠিকানাগুলি যাচাই করার জন্য একটি নিয়মিত অভিব্যক্তি প্রকাশ করা সহজ জিনিস নয়; এই লেখার সময়, একটি ইমেল ঠিকানার বাক্য গঠন অবশ্যই তুলনামূলকভাবে উচ্চ সংখ্যার মান অনুসরণ করতে পারে এবং নিয়মিত প্রকাশের মধ্যে সেগুলির সবগুলি প্রয়োগ করা কার্যতঃ অপ্রয়োজনীয়!
আমি অত্যন্ত আমাদের চেষ্টা করতে আপনার প্রস্তাবিত EmailVerify.NET , একটি পরিপক্ক .NET গ্রন্থাগার নিম্নলিখিত ইমেল ঠিকানাগুলি যাচাই করতে পারেন সব বর্তমান IETF মান (RFC 1123, বোঝায় যা RFC 2821, বোঝায় যা RFC 2822, বোঝায় যা RFC 3696, বোঝায় যা RFC 4291, বোঝায় যা RFC 5321 এবং জন্য RFC 5322) , সম্পর্কিত ডিএনএস রেকর্ডগুলি পরীক্ষা করে, লক্ষ্যযুক্ত মেলবক্সগুলি বার্তা গ্রহণ করতে পারে কিনা তা পরীক্ষা করে এবং কোনও প্রদত্ত ঠিকানাটি ডিসপোজেবল কিনা তা এমনকি তাও বলতে পারে।
দাবি অস্বীকার: আমি এই উপাদানটির জন্য নেতৃত্ব বিকাশকারী।
For the simple email like goerge@xxx.com, below code is sufficient.
public static bool ValidateEmail(string email)
{
System.Text.RegularExpressions.Regex emailRegex = new System.Text.RegularExpressions.Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
System.Text.RegularExpressions.Match emailMatch = emailRegex.Match(email);
return emailMatch.Success;
}
আপনি যদি ফ্লুয়েন্টভ্লিয়েডেশন ব্যবহার করছেন তবে আপনি এর চেয়ে সহজ কিছু লিখতে পারেন:
public cass User
{
public string Email { get; set; }
}
public class UserValidator : AbstractValidator<User>
{
public UserValidator()
{
RuleFor(x => x.Email).EmailAddress().WithMessage("The text entered is not a valid email address.");
}
}
// Validates an user.
var validationResult = new UserValidator().Validate(new User { Email = "açflkdj" });
// This will return false, since the user email is not valid.
bool userIsValid = validationResult.IsValid;
@ কগওহিল উত্তরে সামান্য পরিবর্তন ification
public static bool IsValidEmail(this string email)
{
// skip the exception & return early if possible
if (email.IndexOf("@") <= 0) return false;
try
{
var address = new MailAddress(email);
return address.Address == email;
}
catch
{
return false;
}
}
Console.WriteLine(MailAddress("asdf@asdf.").Address);
"এসএসডিএফ @ এসএসডিএফ।" আউটপুট, যা বৈধ নয়।
এখানে অনেক শক্ত উত্তর রয়েছে। যাইহোক, আমি সুপারিশ করছি আমরা একটি পদক্ষেপ পিছনে নিতে। @ কগওহিল https://stackoverflow.com/a/1374644/388267 প্রশ্নের উত্তর দেয় । তবুও, এটি বেশিরভাগ বৈধতার দৃশ্যে ব্যয়বহুল হতে পারে, যদি ইমেল ঠিকানাটি বৈধ হয়ে থাকে তবে অনেকগুলি অবৈধ। আমি প্রস্তাব দিই যে আমরা তার ট্রাই-ক্যাচ ব্লকে প্রবেশের আগে কিছুটা যুক্তিযুক্ত নিয়োগ করি। আমি জানি যে নিচের কোডটি RegEx ব্যবহার করে লেখা যেতে পারে তবে নতুন বিকাশকারীদের বুঝতে এটি ব্যয়বহুল হতে পারে। এটি আমার দ্বিগুণ মূল্য:
public static bool IsEmail(this string input)
{
if (string.IsNullOrWhiteSpace(input)) return false;
// MUST CONTAIN ONE AND ONLY ONE @
var atCount = input.Count(c => c == '@');
if (atCount != 1) return false;
// MUST CONTAIN PERIOD
if (!input.Contains(".")) return false;
// @ MUST OCCUR BEFORE LAST PERIOD
var indexOfAt = input.IndexOf("@", StringComparison.Ordinal);
var lastIndexOfPeriod = input.LastIndexOf(".", StringComparison.Ordinal);
var atBeforeLastPeriod = lastIndexOfPeriod > indexOfAt;
if (!atBeforeLastPeriod) return false;
// CODE FROM COGWHEEL'S ANSWER: https://stackoverflow.com/a/1374644/388267
try
{
var addr = new System.Net.Mail.MailAddress(input);
return addr.Address == input;
}
catch
{
return false;
}
}
@ কগওহিলের সর্বাধিক ভোট দেওয়া উত্তর হ'ল সেরা উত্তর তবে আমি trim()
স্ট্রিং পদ্ধতিটি প্রয়োগ করার চেষ্টা করেছি যাতে এটি স্ট্রিং শুরু থেকে শেষ পর্যন্ত সমস্ত ব্যবহারকারীর সাদা স্থানকে ছাঁটাই করে দেয়। পুরো উদাহরণের জন্য কোড নমুনা পরীক্ষা করুন-
bool IsValidEmail(string email)
{
try
{
email = email.Trim();
var addr = new System.Net.Mail.MailAddress(email);
return addr.Address == email;
}
catch
{
return false;
}
}
SanitizeEmail(string email)
ফলাফল ব্যবহার করে ইমেলটি বৈধকরণ এবং প্রেরণ করার জন্য একটি পৃথক পদ্ধতি তৈরি করা আরও ভাল পদ্ধতির হবে ।
private static bool IsValidEmail(string emailAddress)
{
const string validEmailPattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"
+ @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
+ @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
return new Regex(validEmailPattern, RegexOptions.IgnoreCase).IsMatch(emailAddress);
}
ইমেল স্ট্রিং সঠিক ফর্ম্যাট বা ভুল ফর্ম্যাট এটি দ্বারা যাচাই করুন System.Text.RegularExpressions
:
public static bool IsValidEmailId(string InputEmail)
{
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(InputEmail);
if (match.Success)
return true;
else
return false;
}
protected void Email_TextChanged(object sender, EventArgs e)
{
String UserEmail = Email.Text;
if (IsValidEmailId(UserEmail))
{
Label4.Text = "This email is correct formate";
}
else
{
Label4.Text = "This email isn't correct formate";
}
}
/ "নতুন ইমেলএড্রেসএট্রিবিউট ()" তৈরিতে ব্যবহৃত অভ্যন্তরীণ রেজেক্স ব্যবহার করে; । নেট 4.5 >>> এ উপাদান.সম্পট.মোটেল.ডাটাঅ্যানোটেশন ব্যবহার করে; // একটি ইমেল ঠিকানা যাচাইকরণ ...... পরীক্ষিত এবং কাজ।
public bool IsEmail(string email)
{
if (String.IsNullOrEmpty(email))
{ return false; }
try
{
Regex _regex = new Regex("^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])" +
"+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)" +
"((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|" +
"[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\u" +
"FDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|" +
"(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|" +
"[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900" +
"-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF" +
"EF])))\\.?$", RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture | RegexOptions.Compiled);
return _regex.IsMatch(email);
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
এছাড়াও, আপনি এটি ব্যবহার করতে পারেন:
http://msdn.microsoft.com/en-us/library/01escwtf(v=vs.110).aspx
আমি পয়সন 1 এর উত্তরকে এরকমভাবে সাফল্য দিয়েছি:
public static bool IsValidEmailAddress(string candidateEmailAddr)
{
string regexExpresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
return (Regex.IsMatch(candidateEmailAddr, regexExpresion)) &&
(Regex.Replace(candidateEmailAddr, regexExpresion, string.Empty).Length == 0);
}
ইমেইলআইডি সনাক্ত করার সহজ উপায়টি বৈধ কিনা।
public static bool EmailIsValid(string email)
{
return Regex.IsMatch(email, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
জেএস এর পরিবর্তে সি # তে রেজেক্সে সংস্কৃতি সমস্যা রয়েছে। সুতরাং আমাদের ইমেল চেকের জন্য মার্কিন মোডে রেজেক্স ব্যবহার করতে হবে। আপনি যদি ECMAScript মোড ব্যবহার না করেন তবে আপনার ভাষার বিশেষ অক্ষরগুলি রেজিস্টের সাথে AZ তে বোঝানো হবে।
Regex.IsMatch(email, @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9_\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", RegexOptions.ECMAScript)
আমি এই রেজেেক্সটি ব্যবহার করে শেষ করেছি, কারণ এটি কমা, মন্তব্য, ইউনিকোড অক্ষর এবং আইপি (ভি 4) ডোমেন ঠিকানাগুলি সফলভাবে যাচাই করে।
বৈধ ঠিকানাগুলি হবে:
"" @ example.org
(comment)test@example.org
тест@example.org
ტესტი @ example.org
পরীক্ষা @ [192.168.1.1]
public const string REGEX_EMAIL = @"^(((\([\w!#$%&'*+\/=?^_`{|}~-]*\))?[^<>()[\]\\.,;:\s@\""]+(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))(\([\w!#$%&'*+\/=?^_`{|}~-]*\))?@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";
Regex ব্যবহার না করে একটি সাধারণ (যা আমি এর খারাপ পাঠযোগ্যতার জন্য পছন্দ করি না):
bool IsValidEmail(string email)
{
string emailTrimed = email.Trim();
if (!string.IsNullOrEmpty(emailTrimed))
{
bool hasWhitespace = emailTrimed.Contains(" ");
int indexOfAtSign = emailTrimed.LastIndexOf('@');
if (indexOfAtSign > 0 && !hasWhitespace)
{
string afterAtSign = emailTrimed.Substring(indexOfAtSign + 1);
int indexOfDotAfterAtSign = afterAtSign.LastIndexOf('.');
if (indexOfDotAfterAtSign > 0 && afterAtSign.Substring(indexOfDotAfterAtSign).Length > 1)
return true;
}
}
return false;
}
উদাহরণ:
IsValidEmail("@b.com") // false
IsValidEmail("a@.com") // false
IsValidEmail("a@bcom") // false
IsValidEmail("a.b@com") // false
IsValidEmail("a@b.") // false
IsValidEmail("a b@c.com") // false
IsValidEmail("a@b c.com") // false
IsValidEmail("a@b.com") // true
IsValidEmail("a@b.c.com") // true
IsValidEmail("a+b@c.com") // true
IsValidEmail("a@123.45.67.89") // true
এটি সহজ হতে বোঝানো হয়েছে এবং তাই এটি ফাঁকা ডোমেনগুলির সাথে ইমেল যেমন স্পেস (সাধারণত অনুমোদিত), আইপিভি 6 ঠিকানা সহ ইমেল ইত্যাদির মতো বিরল ক্ষেত্রে মোকাবেলা করে না doesn't
আপনার চেক করার জন্য আপনার প্রশ্নের উত্তর এখানে।
using System;
using System.Globalization;
using System.Text.RegularExpressions;
public class RegexUtilities
{
public bool IsValidEmail(string strIn)
{
if (String.IsNullOrEmpty(strIn))
{
return false;
}
// Use IdnMapping class to convert Unicode domain names.
try
{
strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper, RegexOptions.None, TimeSpan.FromMilliseconds(200));
}
catch (RegexMatchTimeoutException)
{
return false;
}
if (invalid)
{
return false;
}
// Return true if strIn is in valid e-mail format.
try
{
return Regex.IsMatch(strIn, @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))| [-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
private string DomainMapper(Match match)
{
// IdnMapping class with default property values.
IdnMapping idn = new IdnMapping();
string domainName = match.Groups[2].Value;
try
{
domainName = idn.GetAscii(domainName);
}
catch (ArgumentException)
{
invalid = true;
}
return match.Groups[1].Value + domainName;
}
}
@ কগওহিলের উত্তরের ভিত্তিতে আমি একটি পরিবর্তিত সমাধান ভাগ করতে চাই যা এসএসআইএস এবং "স্ক্রিপ্ট উপাদান" এর জন্য কাজ করে:
এই কোডটি সঠিক পদ্ধতিতে রাখুন:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string email = Row.fieldName;
try
{
System.Net.Mail.MailAddress addr = new System.Net.Mail.MailAddress(email);
Row.fieldName= addr.Address.ToString();
}
catch
{
Row.fieldName = "WRONGADDRESS";
}
}
তারপরে আপনি সমস্ত অবৈধ রেকর্ডগুলি বা আপনি যা করতে চান তা ফিল্টার করতে আপনি শর্তাধীন স্প্লিট ব্যবহার করতে পারেন।