如何从 .NET 电子邮件地址数据注释支持的某些 POST 表单数据中 trim 空格
How to trim spaces from some POST'ed Form Data that is backed by a .NET EmailAddress DataAnnotation
我有一个简单的输入模型,上面有一个 Email
属性。我正在使用 EmailAddress
DataAnnotation 来验证输入数据。
[Required]
[Display(Name = "UserReview_CustomerEmailTitle", ResourceType = typeof(Resources.User.Settings))]
[EmailAddress(ErrorMessageResourceType = typeof(Resources.User.Settings), ErrorMessageResourceName = "UserReview_InvalidEmailMessage")]
public string CustomerEmail { get; set; }
如果没有 spaces before/after 输入数据,它工作完美(即数据有效)。
当我在输入文本的末尾有一个 space 时,它无法通过验证。
我可以对 TRIM 传入的输入数据做些什么,或者告诉 EmailAddress 验证程序忽略 prepended/postpended spaces?
编辑:
我愿意创建自定义属性...我无法从 EmailAddress
属性继承,因为它是 sealed
(叹息)..所以也许是正则表达式属性?
尝试CustomerEmail.Trim()
。它完全符合您的描述。
见https://msdn.microsoft.com/en-us/library/t97s7bs3(v=vs.110).aspx
您可以在 javascript 中处理当用户从电子邮件字段切换到客户端 运行 trim on the value and replace it. EmailAddress annotation plays nice with unobtrusive validation 时(假设此处使用 MVC)。
如果您想避免客户端,您可以查看自定义模型绑定器,您可以在其中操作用于创建待验证模型的数据。你可以查看一些教程 here.
最后但同样重要的是,也许您可以 borrow the regex used within the Email validator and make it accept whitespace via a new RegularExpression validator 并显式处理代码中的 TRIM。
如果您能够对模型进行更改,您可以添加另一个 属性 并验证它:
[Required]
public string CustomerEmail { get; set; }
[Required]
[Display(Name = "UserReview_CustomerEmailTitle", ResourceType = typeof(Resources.User.Settings))]
[EmailAddress(ErrorMessageResourceType = typeof(Resources.User.Settings), ErrorMessageResourceName = "UserReview_InvalidEmailMessage")]
public string CustomerEmailTrimmed => CustomerEmail?.Trim();
在 ASP.NET Core 2.2 上有类似的问题。
我有一个简单的输入模型,上面有一个 Email
属性。我正在使用 EmailAddress
DataAnnotation 来验证输入数据。
[Required]
[Display(Name = "UserReview_CustomerEmailTitle", ResourceType = typeof(Resources.User.Settings))]
[EmailAddress(ErrorMessageResourceType = typeof(Resources.User.Settings), ErrorMessageResourceName = "UserReview_InvalidEmailMessage")]
public string CustomerEmail { get; set; }
如果没有 spaces before/after 输入数据,它工作完美(即数据有效)。
当我在输入文本的末尾有一个 space 时,它无法通过验证。
我可以对 TRIM 传入的输入数据做些什么,或者告诉 EmailAddress 验证程序忽略 prepended/postpended spaces?
编辑:
我愿意创建自定义属性...我无法从 EmailAddress
属性继承,因为它是 sealed
(叹息)..所以也许是正则表达式属性?
尝试CustomerEmail.Trim()
。它完全符合您的描述。
见https://msdn.microsoft.com/en-us/library/t97s7bs3(v=vs.110).aspx
您可以在 javascript 中处理当用户从电子邮件字段切换到客户端 运行 trim on the value and replace it. EmailAddress annotation plays nice with unobtrusive validation 时(假设此处使用 MVC)。
如果您想避免客户端,您可以查看自定义模型绑定器,您可以在其中操作用于创建待验证模型的数据。你可以查看一些教程 here.
最后但同样重要的是,也许您可以 borrow the regex used within the Email validator and make it accept whitespace via a new RegularExpression validator 并显式处理代码中的 TRIM。
如果您能够对模型进行更改,您可以添加另一个 属性 并验证它:
[Required]
public string CustomerEmail { get; set; }
[Required]
[Display(Name = "UserReview_CustomerEmailTitle", ResourceType = typeof(Resources.User.Settings))]
[EmailAddress(ErrorMessageResourceType = typeof(Resources.User.Settings), ErrorMessageResourceName = "UserReview_InvalidEmailMessage")]
public string CustomerEmailTrimmed => CustomerEmail?.Trim();
在 ASP.NET Core 2.2 上有类似的问题。