C# 如何拆分文本框值并在c中检查它是电子邮件ID还是纯文本#

C# 如何拆分文本框值并在c中检查它是电子邮件ID还是纯文本#,c#,asp.net,arrays,C#,Asp.net,Arrays,我有一个文本框(txt_to),其中的值用分隔;如何分割这些值,即使只有一个值,代码也不应该出错 我试图用下面的代码拆分它,但出现了一个错误 string[] recipients = Request.Form["txt_to"].Split(';'); Object reference not set to an instance of an object. 文本框中的值可以是类似电子邮件的值(abc@aaa.com)或者只是一个纯文本,比如(Ios组)。文本框中的值如下所示abc@aaa.

我有一个文本框(txt_to),其中的值用分隔;如何分割这些值,即使只有一个值,代码也不应该出错

我试图用下面的代码拆分它,但出现了一个错误

string[] recipients = Request.Form["txt_to"].Split(';');
Object reference not set to an instance of an object.
文本框中的值可以是类似电子邮件的值(abc@aaa.com)或者只是一个纯文本,比如(Ios组)。文本框中的值如下所示abc@aaa.com; Ios组。如何分割值以及如何检查它是电子邮件id还是纯文本

if(email id)
{
Do this
}
else if (Plain text)
{
Do this
}
您可以简单地执行以下操作:

如果字符串包含“@”,则尝试构建MailAddress对象(在try/catch中),如果不包含,则仅为纯文本:)


编辑:更新以考虑注释:)

字符串。使用字符串中不存在的字符拆分字符串时,拆分不会引发错误

例如:

string test =  "jiberish";

string [] result = test.Split(';');
Console.WriteLine(result[0]);   
不会爆炸。如果您得到空引用异常是因为
Request.Form[“txt\u to”]
为空

如果要验证电子邮件地址,请使用正则表达式

比如:

if(Regex.IsMatch("\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b",yourstring))
{
   //valid email
}
else
{
   //not valid
}

注意:上面的正则表达式可能不是最合适的。我用它来给你一个想法。

RFC 2822声明你可以用以下正则表达式来验证电子邮件:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
您应该能够使用a
RegularExpressionValidator
进行以下操作:

<asp:RegularExpressionValidator ID="regEmail" runat="server" Display="Dynamic" ErrorMessage="*" ValidationExpression="^[\w\.\-]+@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]{1,})*(\.[a-zA-Z]{2,3}){1,2}$" ControlToValidate="txtEmail" />                                    
如果不想使用验证器,可以使用代码隐藏中的表达式来验证电子邮件地址,如下所示:

bool isValid = Page.IsValid;
var regex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
bool isValid = regex.IsMatch(txtEmail.Text);
以下是几个您可以尝试的表达式:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

^[\w\.\-]+@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]{1,})*(\.[a-zA-Z]{2,3}){1,2}$

这确实是验证电子邮件最糟糕的方式。不要简单地检查@符号。MailAddress类将验证地址。那么为什么还要检查@符号呢?只需使用try/catch。@ykatchou是的,它将验证电子邮件地址,但try/catch块很昂贵。当您可以简单地使用if语句时,应该避免使用它们。这是验证电子邮件地址的一种糟糕方法。我总是喜欢这样一种不使用复杂正则表达式的解决方案
var regex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
bool isValid = regex.IsMatch(txtEmail.Text);
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

^[\w\.\-]+@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]{1,})*(\.[a-zA-Z]{2,3}){1,2}$