PDA

View Full Version : سوال: ایمیل های معتبر + عبارتهای باقاعده +Regex.IsMatch



mhsmity
چهارشنبه 21 فروردین 1392, 03:23 صبح
با سلام بنده از عبارت باقاعده زیر برای بدست آوردن ایمیل های معتبر استفاده می کنم.
Regex.IsMatch(strIn,
@"^(?("")(""[^""]+?""@)|(([a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$",
RegexOptions.IgnoreCase);
ولی خروجی های زیر رو دارم که اشتباه !!!! هستش:

aferriss@gmail.comadamferriss.tumblr.com


account@ymail.comcreat.softpile.com
ajerinic@gmail.comdeltaluca.me.uk
ahmad_sofyan7897@ymail.comwww.flickr.com
alfestuae@gmail.combuzzon.khaleejtimes.com
wealth.financialservices0@gmail.comwww.scamwarners .com
worldbankauditorss201@gmail.comwww.scamwarners.com


اگر امکان داره بنده رو راهنمایی کنید؟
آیا روش بهتری هم هست؟

ممنون

Mahmoud.Afrad
چهارشنبه 21 فروردین 1392, 05:04 صبح
الگوی ایمیل (http://www.regular-expressions.info/email.html)


نمونه ای از متن strIn را قرار بدید.

tooraj_azizi_1035
چهارشنبه 21 فروردین 1392, 11:11 صبح
منبع:http://msdn.microsoft.com/en-us/library/01escwtf.aspx

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class RegexUtilities
{
bool invalid = false;

public bool IsValidEmail(string strIn)
{
invalid = false;
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]{2,17}))$",
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 class Application
{
public static void Main()
{
RegexUtilities util = new RegexUtilities();
string[] emailAddresses = { "david.jones@proseware.com", "d.j@server1.proseware.com",
"jones@ms1.proseware.com", "j.@server1.proseware.com",
"j@proseware.com9", "js#internal@proseware.com",
"j_9@[129.126.118.1]", "j..s@proseware.com",
"js*@proseware.com", "js@proseware..com",
"js@proseware.com9", "js@proseware.com9", "j.s@server1.proseware.com" };

foreach (var emailAddress in emailAddresses) {
if (util.IsValidEmail(emailAddress))
Console.WriteLine("Valid: {0}", emailAddress);
else
Console.WriteLine("Invalid: {0}", emailAddress);
}
}
}
// The example displays the following output:
// Valid: david.jones@proseware.com
// Valid: d.j@server1.proseware.com
// Valid: jones@ms1.proseware.com
// Invalid: j.@server1.proseware.com
// Invalid: j@proseware.com9
// Valid: js#internal@proseware.com
// Valid: j_9@[129.126.118.1]
// Invalid: j..s@proseware.com
// Invalid: js*@proseware.com
// Invalid: js@proseware..com
// Invalid: js@proseware.com9
// Valid: j.s@server1.proseware.com

mhsmity
چهارشنبه 21 فروردین 1392, 20:56 عصر
الگوی ایمیل (http://www.regular-expressions.info/email.html)

نمونه ای از متن strIn را قرار بدید.

این الگوها هم همین لیست زیر رو معتبر می دونه

این هم از متن های ورودی که گفته بوید


aferriss@gmail.comadamferriss.tumblr.com

account@ymail.comcreat.softpile.com
ajerinic@gmail.comdeltaluca.me.uk
ahmad_sofyan7897@ymail.comwww.flickr.com
alfestuae@gmail.combuzzon.khaleejtimes.com
wealth.financialservices0@gmail.comwww.scamwarners .com (wealth.financialservices0@gmail.comwww.scamwarner s.com)
worldbankauditorss201@gmail.comwww.scamwarners.com

mhsmity
چهارشنبه 21 فروردین 1392, 21:07 عصر
tooraj_azizi_1035 (http://barnamenevis.org/member.php?41757-tooraj_azizi_1035)
دوست عزیز کد های شما برای ورودری های زیر اصلا به درد نمی خوره:


aferriss@gmail.comadamferriss.tumblr.com

account@ymail.comcreat.softpile.com
ajerinic@gmail.comdeltaluca.me.uk
ahmad_sofyan7897@ymail.comwww.flickr.com
alfestuae@gmail.combuzzon.khaleejtimes.com
wealth.financialservices0@gmail.comwww.scamwarners .com (wealth.financialservices0@gmail.comwww.scamwarner s.com)
worldbankauditorss201@gmail.comwww.scamwarners.com

Mahmoud.Afrad
چهارشنبه 21 فروردین 1392, 21:48 عصر
چرا ایمیل ها و url ها بدون فاصله هستند؟ در اینصورت باید پسوندهایی رو تعیین کنید و طبق اون split کنید.

mhsmity
پنج شنبه 22 فروردین 1392, 04:13 صبح
چرا ایمیل ها و url ها بدون فاصله هستند؟ در اینصورت باید پسوندهایی رو تعیین کنید و طبق اون split کنید.
از توجه شما ممنون یعنی هیچ راهی نداره ساده تر دیگه ای نداره ؟

Mahmoud.Afrad
پنج شنبه 22 فروردین 1392, 06:30 صبح
نه! اگر دقت کنی متوجه میشی که درسته یک ایمیل به یک url چسبیده ولی باز هم یک ایمیل معتبر تشخیص داده میشه چون در واقعیت هم ممکنه شخصی دارای ایمیلی شبیهaccount@ymail.comcreat.softpile.com باشه. ولی از اونجایی که شما مطمئن هستی این یک ایمیل و یک url هست ، باید جداشون کنید.
کاری که میتونید انجام بدید اینه که اول طبق همون کد بالا این خطوط رو از متن بکشید بیرون و بعد url ها رو جدا کنید.

mhsmity
پنج شنبه 22 فروردین 1392, 06:44 صبح
نه! اگر دقت کنی متوجه میشی که درسته یک ایمیل به یک url چسبیده ولی باز هم یک ایمیل معتبر تشخیص داده میشه چون در واقعیت هم ممکنه شخصی دارای ایمیلی شبیهaccount@ymail.comcreat.softpile.com باشه. ولی از اونجایی که شما مطمئن هستی این یک ایمیل و یک url هست ، باید جداشون کنید.
کاری که میتونید انجام بدید اینه که اول طبق همون کد بالا این خطوط رو از متن بکشید بیرون و بعد url ها رو جدا کنید.

از کلاس MailMessage msg = new MailMessage استفاده کردم کلا اینجور ایمیل های رو معتبر میشانسه