我需要一个非常通用且松散的正则表达式来发送电子邮件。
只需验证电子邮件字符串中是否有@。
例如:
我目前来到这里:
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/ 它说我的测试字符串是有效的,但是这个属性不会发现变化。
答案 0 :(得分:0)
使用此:
^[^@]+@[^@]+$
^
和$
锚定到字符串的开头和结尾,要求整个字符串匹配。如果没有锚点,您可以@@@@foo@bar
,正则表达式将匹配foo@bar
部分。
[^@]+
匹配一个或多个不是@
的字符,确保字符串中只有一个@
,并确保每边至少有一个字符@
。
答案 1 :(得分:0)
我不明白你的代码究竟是如何工作的,如果可能存在你的错误,但RegEx模式应该像^.*\@{1}.*$
一样简单
我认为@
是一个你必须逃脱的保留角色。