gpt4 book ai didi

c# - 使用 RegularExpressionAttribute 时客户端验证不起作用

转载 作者:行者123 更新时间:2023-11-30 15:08:29 27 4
gpt4 key购买 nike

我无法对使用 MVC3RTM 的正则表达式进行客户端验证。当我注释掉 RegularExpression 属性时,所有其他客户端验证都有效,所以我知道这是导致我出现问题的原因。

我有一个简单的模型。 (SiteText 和 SiteErrors 只是资源文件)

 public class NewUser {

[Required]
[MultiCulturalDisplayName("UserName", typeof(SiteText))]
public string UserName { get; set; }

[Required]
[AllowHtml]
[RegularExpression(RegExConstants.EmailRegEx, ErrorMessageResourceType = typeof(SiteErrors), ErrorMessageResourceName = "EmailInvalid")]
[DataType(DataType.EmailAddress)]
[MultiCulturalDisplayName("EmailAddress", typeof(SiteText))]
public string Email { get; set; }

[Required]
[ValidatePasswordLength]
[DataType(DataType.Password)]
[MultiCulturalDisplayName("Password", typeof(SiteText))]
public string Password { get; set; }

[DataType(DataType.Password)]
[MultiCulturalDisplayName("PasswordConfirm", typeof(SiteText))]
[Compare("Password", ErrorMessageResourceType = typeof(SiteErrors), ErrorMessageResourceName = "PasswordCompare")]
public string ConfirmPassword { get; set; }
}

这是我存储在常量中的 C# 转义正则表达式字符串。

^((?>[a-zA-Z\\d!#$%&'*+\\-/=?^_`{|}~]+\\x20*|\"((?=[\\x01-\\x7f])[^\"\\\\]|\\\\[\\x01-\\x7f])*\"\\x20*)*(?<angle><))?((?!\\.)(?>\\.?[a-zA-Z\\d!#$%&'*+\\-/=?^_`{|}~]+)+|\"((?=[\\x01-\\x7f])[^\"\\\\]|\\\\[\\x01-\\x7f])*\")@(((?!-)[a-zA-Z\\d\\-]+(?<!-)\\.)+[a-zA-Z]{2,}|\\[(((?(?<!\\[)\\.)(25[0-5]|2[0-4]\\d|[01]?\\d?\\d)){4}|[a-zA-Z\\d\\-]*[a-zA-Z\\d]:((?=[\\x01-\\x7f])[^\\\\\\[\\]]|\\\\[\\x01-\\x7f])+)\\])(?(angle)>)$

这是未转义的版本。

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$

正则表达式会不会太长了?

最佳答案

抛开正则表达式参数 - 看看我的博客文章,了解如何使用 ASP.NET MVC 3 和非侵入式验证在客户端上进行电子邮件验证。

此方法使用内置的 jQuery Validation 电子邮件验证,而不是您自己的正则表达式。但是会在服务器端使用你的正则表达式。我不知道 jQuery 验证使用哪种正则表达式,所以这可能是好事也可能是坏事。

ASP.NET MVC 3 Email Validation with Unobtrusive jQuery Validation

这非常简单,如果您想更改正则表达式,只需将您自己的正则表达式插入其中即可。

这是它的核心:

namespace PageDesigners.Library.ValidationAttributes
{
public class EmailAttribute : RegularExpressionAttribute, IClientValidatable
{
public EmailAttribute()
: base(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")
{
}

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

关于c# - 使用 RegularExpressionAttribute 时客户端验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5458411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com