需要一个包含“@”的字符串的非常通用的正则表达式,以使用自定义验证器

时间:2013-03-08 09:51:01

标签: regex

我需要一个非常通用且松散的正则表达式来发送电子邮件。

只需验证电子邮件字符串中是否有@。

例如:

  • a @ a =有效
  • a。@ ___ asdsadc =有效
  • aaaaa@sdsdc.com =有效
  • ssdsadsadassd =无效

我目前来到这里:

public class EmailAttribute : RegularExpressionAttribute, IClientValidatable
{
    public EmailAttribute()
        //: base("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-_]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-_]*[A-Za-z0-9])?")
        : base(".*@.*")
    {
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var errorMessage = FormatErrorMessage(metadata.GetDisplayName());

        yield return new EmailValidationRule(errorMessage);
    }
}

public class EmailValidationRule : ModelClientValidationRule
{
    public EmailValidationRule(string errorMessage)
    {
        ErrorMessage = errorMessage;
        ValidationType = "email";
    }
}

所以第一个太紧了,第二个似乎没有返回正确的值 - 我仍被告知我的字符串无效。

是因为我的正则表达式错了吗?我怀疑这个验证器可能与其他验证器不同,因为validatorType是“email”,因此它没有我需要将它注册为不显眼的验证器。

它不一定是一个正确的正则表达式,它必须能够验证任何东西,只要它上面有@符号。

我已使用此网站验证我的正则表达式:http://gskinner.com/RegExr/ 它说我的测试字符串是有效的,但是这个属性不会发现变化。

2 个答案:

答案 0 :(得分:0)

使用此:

^[^@]+@[^@]+$

^$锚定到字符串的开头和结尾,要求整个字符串匹配。如果没有锚点,您可以@@@@foo@bar,正则表达式将匹配foo@bar部分。

[^@]+匹配一个或多个不是@的字符,确保字符串中只有一个@,并确保每边至少有一个字符@

答案 1 :(得分:0)

我不明白你的代码究竟是如何工作的,如果可能存在你的错误,但RegEx模式应该像^.*\@{1}.*$一样简单 我认为@是一个你必须逃脱的保留角色。