Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 记事本新行和电子邮件的验证_C#_Asp.net - Fatal编程技术网

C# 记事本新行和电子邮件的验证

C# 记事本新行和电子邮件的验证,c#,asp.net,C#,Asp.net,我有一个要求,即我必须验证电子邮件地址(正确的电子邮件格式)以及记事本中的每一行,不包括逗号(,),分号(;),空格(“”)。因此,我做了以下似乎不起作用的事情: StreamReader file = new StreamReader(@"" + email + ""); string line = file.ReadLine(); if ((line == null || line.Contains(";") || line.Contains(",") || line.Contains(

我有一个要求,即我必须验证电子邮件地址(正确的电子邮件格式)以及记事本中的每一行,不包括逗号(,)分号(;)空格(“”)。因此,我做了以下似乎不起作用的事情:

StreamReader file = new StreamReader(@"" + email + "");
string line = file.ReadLine(); 

if ((line == null || line.Contains(";") || line.Contains(",") || line.Contains(" ") || line.Contains(email) != IsValidEmail(email)))
{
   return "Check your file. Invalid format!";
}

public bool IsValidEmail(string email)
{
    try
    {
       MailAddress emailAddress = new MailAddress(email);
       return true;
    }
    catch
    {
       return false;
    }
}
上面的代码没有验证电子邮件地址,但它确实验证了以下内容(我指的是第一行):

at-2017@yahoo.com; we@yahoo.com //Invalid format
at-2018@yahoo.com
但是,如果分号位于下一行并将其保存到数据库表中,则不会验证此操作:

at-2017@yahoo.com
at-2018@yahoo.com;//Doesn't validate

这很简单,但可能是我做错了什么,这正是我想弄明白的。如有任何建议,我们将不胜感激。

这样的建议

void Main()
{
    var file = @"at-2017@yahoo.com;
we@yahoo.com
at-2018@yahoo.com
at-2017@yahoo.com
at-2018@yahoo.com;";

    using (var memory = new MemoryStream(Encoding.UTF8.GetBytes(file)))
    using (var reader = new StreamReader(memory))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            var email = new StringBuilder(line)
                .Replace(";", string.Empty)
                .Replace(",", string.Empty)
                .Replace(" ", string.Empty)
                .ToString();
            var isEmailValid = IsValidEmail(email);
            Console.WriteLine($"{isEmailValid,-5}: {email,-20} original: {line}");
        }
    }
}

bool IsValidEmail(string strIn)
{
    // Return true if strIn is in valid e-mail format.
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
}
结果:

True : at-2017@yahoo.com    original: at-2017@yahoo.com;
True : we@yahoo.com         original: we@yahoo.com
True : at-2018@yahoo.com    original: at-2018@yahoo.com
True : at-2017@yahoo.com    original: at-2017@yahoo.com
True : at-2018@yahoo.com    original: at-2018@yahoo.com;

像这样的

void Main()
{
    var file = @"at-2017@yahoo.com;
we@yahoo.com
at-2018@yahoo.com
at-2017@yahoo.com
at-2018@yahoo.com;";

    using (var memory = new MemoryStream(Encoding.UTF8.GetBytes(file)))
    using (var reader = new StreamReader(memory))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            var email = new StringBuilder(line)
                .Replace(";", string.Empty)
                .Replace(",", string.Empty)
                .Replace(" ", string.Empty)
                .ToString();
            var isEmailValid = IsValidEmail(email);
            Console.WriteLine($"{isEmailValid,-5}: {email,-20} original: {line}");
        }
    }
}

bool IsValidEmail(string strIn)
{
    // Return true if strIn is in valid e-mail format.
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
}
结果:

True : at-2017@yahoo.com    original: at-2017@yahoo.com;
True : we@yahoo.com         original: we@yahoo.com
True : at-2018@yahoo.com    original: at-2018@yahoo.com
True : at-2017@yahoo.com    original: at-2017@yahoo.com
True : at-2018@yahoo.com    original: at-2018@yahoo.com;

如果出现如下情况,请更改您的

if ((line == null || line.Contains(";") || line.Contains(",") || line.Contains(" ") || !IsValidEmail(line)))

如果出现如下情况,请更改您的

if ((line == null || line.Contains(";") || line.Contains(",") || line.Contains(" ") || !IsValidEmail(line)))

看起来您只是在从文件中读取第一行数据。试试这个:

foreach (string line in File.ReadLines(@"path to file"))
{
    //do validation for each line
    if (IsValidEmail(line) //etc)
    {
        // do something once line is valid.
    }
}
如果编码是一个问题,则此方法有一个重载,您可以在其中指定它:


看起来您只是在从文件中读取第一行数据。试试这个:

foreach (string line in File.ReadLines(@"path to file"))
{
    //do validation for each line
    if (IsValidEmail(line) //etc)
    {
        // do something once line is valid.
    }
}
如果编码是一个问题,则此方法有一个重载,您可以在其中指定它:


所以您有逗号/分号分隔的文件?每行可以有0-n个地址?不可以@Tomas Jakl。每行应该只有一个电子邮件地址,并且每行不应该有逗号、分号或空格。即使是无效的电子邮件也应该在每一行中进行验证。你只是在读第一行吗?所以你有逗号/分号分隔的文件?每行可以有0-n个地址?不可以@Tomas Jakl。每行应该只有一个电子邮件地址,并且每行不应该有逗号、分号或空格。即使无效的电子邮件也应该在每一行中进行验证。你只是在读第一行吗?回答得好,但是,既然
line
已经是
string
了,为什么要为每一行读一次构建
StringBuilder
。最后可能只有一个电子邮件地址,所以我同意,
StringBuilder
是多余的。回答得好,但是,既然
line
已经是一个
string
了,为什么要为每一行读取构建一个
StringBuilder
?可能是我的习惯将未知数量的字符串串联起来(最初我以为一行中有更多的电子邮件地址)。最后,可能只有一个电子邮件地址,因此我同意,
StringBuilder
是多余的。谢谢@Ric。我错过了验证的
foreach
循环:DYou's welcome。另一个答案也很好,使用了与您类似的代码并添加了while循环。这两个都很好。谢谢@Ric。我错过了
foreach
循环验证:不客气。另一个答案也很好,使用了与您类似的代码,添加了while循环。两者都可以完成这项工作。