【问题标题】:User validation using regular expression使用正则表达式进行用户验证
【发布时间】:2014-03-23 17:18:58
【问题描述】:

大家好,我正在开发 webmatrix 中的一个项目,该项目需要用户在那里注册详细信息。第一个框是他们的电子邮件地址。基本上我需要一些帮助来确定正则表达式。

我在主文件夹中有一个名为 validation.cshtml 的文件,具有以下功能:

@functions {
    public static bool IsValidEmail(string value) 
    { 
        const string expression = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; 
        return Regex.IsMatch(value, expression); 
    }
}

然后我在 register.cshtml 页面中调用该函数,但这是我出错的地方。我不确定如何编写函数。这是我所拥有的

if (!Validation.IsMatch(email)) 
{ 
    ModelState.AddError("email", "The Email Address Must contain the @ sign"); 
} 

我在这里有“电子邮件”,因为这是电子邮件文本字段的变量名。

【问题讨论】:

  • 抱歉,代码有点乱了!

标签: c# regex asp.net-mvc validation


【解决方案1】:

如果您使用 MVC,则无需为电子邮件地址编写自己的验证。将 Datetype 属性添加到模型类中的属性。

[DataType(DataType.EmailAddress)]
public string Email { get; set; }

在视图中添加验证消息。

@Html.ValidationMessageFor(x => x.Email)

就是这样。

希望这能满足您的需求!

【讨论】:

    【解决方案2】:

    如果您想验证一个字符串以查看它是否可用于发送电子邮件,则不需要正则表达式。这样就可以了:

    @functions {
        public static bool IsValidEmail(string value) {
            try{
                MailAddress email = new MailAddress(value);
                return true;
            }
            catch(FormatException fex){
                return false;
            }
        }
    }
    

    您可能需要添加

    using System.Net.Mail;
    

    到文件的顶部。

    函数应位于 App_Code 文件夹中的 cshtml 文件中,以便站点中的任何文件都可以使用它们。否则,它们的范围仅限于它们所在的文件。如果您将 Validation.cshtml 文件移动到 App_Code(您可能需要先创建该文件夹)并将其重命名为 MyValidation.cshtml 以防止与 ValidationHelper 类发生冲突,您调用方法是这样的:

    if(!MyValidation.IsValidEmail(email)){
        ModelState.AddError("email", "BOOOM!");
    }
    

    【讨论】: