使用正则表达式的用户验证

时间:2014-03-23 17:18:58

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

嘿伙计们我正在研究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"); 
} 

我有"电子邮件"这是因为这是电子邮件文本字段的变量名称。

2 个答案:

答案 0 :(得分:1)

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

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

在视图中添加validationmessage。

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

就是这样。

希望能满足您的需求!

答案 1 :(得分:0)

如果您想验证字符串是否可以用来发送电子邮件,那么您就不需要正则表达式。这样就可以了:

@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!");
}