【问题标题】:Email Address Validation C# [duplicate]电子邮件地址验证 C# [重复]
【发布时间】:2013-03-25 02:29:17
【问题描述】:

C# 新手,似乎有问题。 我正在修改具有以下代码验证电子邮件地址的程序:

public static bool IsValidEmail(string sEmail)
    {
        sEmail = sEmail.Trim();
        if (sEmail == string.Empty)
        {
            return false;
        }
return (Regex.IsMatch(sEmail, @"^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@"
                       + @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\."
                       + @"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
                       + @"([a-zA-Z]+[\w-]*\.)+[a-zA-Z]{1,4})$"));

现在,自从实施了电子邮件验证后,电子邮件验证发生了变化,现在我只想验证是否存在 @ 和 .在地址中。

我试过了:

   public static bool IsValidEmail(string sEmail)
     if ((sEmail.IndexOf("@") != -1) & (sEmail.IndexOf(".") != -1))
        {
            return true;
        }
        else
        {
            return false;
        }

但是 a 现在应该是有效地址,即 name+@domain.com 仍被视为错误地址。

任何帮助将不胜感激。

【问题讨论】:

  • 这不是重复的。这是一个语法问题。
  • @RoyiNamir - 自定义正则表达式和标准 .NET 正则表达式之间存在差异。一个更可能不太一致。
  • @keyboardP 我们可以争论这个模式。是的。但是说您不应该尝试使用正则表达式来验证电子邮件地址。 - 那是另一回事...
  • @RoyiNamir - 这是公平的,我应该用“你自己的”正则表达式来澄清。一个关键原因是,如果 OP 继续创建一个 MailAddress 对象,该对象不针对 .NET 正则表达式进行验证,但针对他的正则表达式进行验证,无论如何都会引发异常。
  • 这显然不是你真正的代码——它不能编译(缺少大括号来定义方法)。此外,您发布的代码会将name+@domain.com 验证为有效的电子邮件地址。请发布您的 real 代码和您的 real 问题。

标签: c# email


【解决方案1】:

我不确定问题出在哪里(我认为这不是明显的语法错误) 您提供的代码确实按照您描述的方式工作。

我稍微改写了一下,这样它就可以编译和工作了:

public static bool IsValidEmail(string sEmail)
{
    return sEmail.IndexOf("@") != -1 && sEmail.IndexOf(".") != -1;
}

已通过此 nunit 测试验证:

[Test]
public void IsValidEmailTest()
{
    Assert.IsTrue( IsValidEmail( "name+@domain.com" ) );
    Assert.IsTrue( IsValidEmail( "name@domain.com" ) );
    Assert.IsFalse( IsValidEmail( "namedomain.com" ) );
    Assert.IsFalse( IsValidEmail( "namedomaincom" ) );
    Assert.IsFalse( IsValidEmail( "named@omaincom" ) );
}

【讨论】:

  • 不幸的是,这并不能解决问题,我开始认为问题可能出现在应用程序的其他地方
  • @Gerry85,听起来你必须在别处寻找,我发布的代码有效,正如单元测试所证明的那样。祝你好运。
  • 我想我会需要它,这是 4 年前不再在这里的人写的。很少或根本不需要注释。
  • 当我尝试上面的内容时,我遇到了“void”问题 - 预期的类、委托、枚举、接口或结构
  • @Gerry85,你写了什么?请注意您编写的方法返回 bool 但 nunit 测试是 void,我只添加了测试,以显示它处理的输入。
【解决方案2】:

试试这个解决方案:

    protected override bool EvaluateIsValid()
    {
        string val = this.GetControlValidationValue(this.ControlToValidate);
        string pattern = @"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$";
        Match match = Regex.Match(val.Trim(), pattern, RegexOptions.IgnoreCase);

        if (match.Success)
            return true;
        else
            return false;
    }

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2014-11-29
    • 2011-12-11
    • 2018-05-30
    • 2011-05-28
    • 2016-04-25
    相关资源
    最近更新 更多