从URL中获取电子邮件地址,在c#中使用或不使用@的转义字符
我有一个Url,如下所示
http://www.mytestsite.com/TesPage.aspx?pageid=32&LangType=1033&emailAddress=myname%40gmail.com
我想从网址获取电子邮件地址
注意
电子邮件地址可能有@的转义字符。
即它可能是myname%40gmail.com或myname@gmail.com
有没有什么办法从网址获取电子邮件地址,例如,如果电子邮件地址的匹配regx为regten并检索值。
这是我试过的代码
string theRealURL = "http://www.mytestsite.com/TesPage.aspx?pageid=32&LangType=1033&emailAddress=myname%40gmail.com";
string emailPattern = @"^([w.-]+)(((%40))|(@))([w-]+)((.(w){2,3})+)$";
Match match = Regex.Match(theRealURL, emailPattern);
if (match.Success)
string campaignEmail = match.Value;
如果有人帮助这里出了什么问题?
谢谢
如果可能,请在有特定于域的工具可用时使用正则表达式。
除非有理由不参考System.Web
,否则使用
var uri = new Uri(
"http://www.mytestsite.com/TesPage.aspx?pageid=32&LangType=1033&emailAddress=myname%40gmail.com");
var email = HttpUtility.ParseQueryString(uri.Query).Get("emailAddress");
编辑:如果(出于某种原因)您不知道包含地址的参数的名称,请使用适当的工具获取所有查询值,然后查看看起来像电子邮件地址的内容。
var emails = query
.AllKeys
.Select(k => query[k])
.Where(v => Regex.IsMatch(v, emailPattern));
如果你想提高你的电子邮件正则表达式,那么已经有很多答案了。
从Rawling的回答开始回应评论
查询字符串参数可能会有所不同..如何不使用查询字符串参数名称。
以下代码将在提供的输入中生成emails
列表( emails
):
var input = "http://www.mytestsite.com/TesPage.aspx?pageid=32&LangType=1033&emailAddress=myname%40gmail.com";
var queryString = new Uri(input).Query;
var parsed = HttpUtility.ParseQueryString(queryString);
var attribute = new EmailAddressAttribute();
var emails = new List<string>();
foreach (var key in parsed.Cast<string>())
{
var value = parsed.Get(key);
if (attribute.IsValid(value))
emails.Add(value);
}
Console.WriteLine(String.Join(", ", emails)); // prints: myname@gmail.com
另请参阅电子邮件解析技术的答案。
链接地址: http://www.djcxy.com/p/92851.html上一篇: Get email address from the url with and without escape character of @ in c#
下一篇: EmailAttribute is not validating correctly in a ViewModel from ASP.NET Core