在注册表单中,我使用 EmailAddress 属性来验证用户电子邮件。
public class RegisterViewModel
{
[Required(ErrorMessage = "Pole wymagane")]
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
public string Email { get; set; }
}
如果验证失败,是否有机会显示电子邮件地址的问题?例如“哎呀,我发现您的电子邮件地址包含空格”
您必须为此添加另一个验证。使用
[RegularExpression]
的示例
public class RegisterViewModel
{
[Required(ErrorMessage = "Pole wymagane")]
[RegularExpression(@"^\S*$", ErrorMessage = "Email Address cannot have white spaces")]
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
public string Email { get; set; }
}
您可以为电子邮件定义自己的正则表达式:
// built-in [EmailAddress] does not allow white spaces around email
public const string EmailValidationRegEx = @"^\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*$";
注意:我刚刚在现有的 .NET 正则表达式模式周围添加了空格以进行电子邮件匹配:
"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"
现在您可以使用这个新的正则表达式模式代替
[EmailAddress]
属性:
public class RegisterViewModel
{
private string _email;
[Required(ErrorMessage = "Pole wymagane")]
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
[RegularExpressionWithOptions(EmailValidationRegEx, ErrorMessage = "Invalid email")]
public string Email
{
get => _email;
set
{
_email = string.IsNullOrEmpty(value) ? string.Empty : value.Trim();
}
}
}
请注意,我已经修改了设置器
trim
value
。这确保我们在使用电子邮件值之前始终消除多余的空格。