我需要一个非常通用和松散的电子邮件正则表达式。
它只需要验证电子邮件字符串中是否有@。
例如:
- 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/ 它说我的测试字符串是有效的,但是这个属性不接受更改。