0

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

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

例如:

  • 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";
    }
}

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

是因为我的正则表达式错误吗?我怀疑这个验证器可能与其他验证器不同,因为验证器类型是“电子邮件”,因此它可以在我不需要将其注册为不显眼的验证器的情况下工作。

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

我已经使用这个站点来验证我的正则表达式: http: //gskinner.com/RegExr/ 它说我的测试字符串是有效的,但是这个属性不接受更改。

4

2 回答 2

0

用这个:

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

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

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

于 2013-03-08T10:14:33.090 回答
0

我不明白你的代码是如何工作的,如果你的错在那里,但是 RegEx 模式应该像^.*\@{1}.*$ 我认为的那样简单,@它是你必须转义的保留字符。

于 2013-03-08T10:14:41.013 回答