gpt4 book ai didi

c# - 针对包含逗号分隔电子邮件的字符串进行验证

转载 作者:太空狗 更新时间:2023-10-30 00:54:35 28 4
gpt4 key购买 nike

我正在尝试在 MVC 模型中验证此属性,该模型可以包含零个或多个以逗号分隔的电子邮件地址:

public class DashboardVM
{
public string CurrentAbuseEmails { get; set; }
...
}

问题是我如何使用电子邮件地址的内置流畅验证规则来做到这一点?现在我有一个使用 Must 和正则表达式的解决方案,但我觉得它不够优雅。

    public DashboardVMValidator()
{
RuleFor(x => x.CurrentAbuseEmails).Must(BeValidDelimitedEmailList).WithMessage("One or more email addresses are not valid.");
}

private bool BeValidDelimitedEmailList(string delimitedEmails)
{
//... match very very long reg. expression
}

到目前为止,包括 RuleFor(...).EmailAddress() 在内的最接近的解决方案是在下面创建一个自定义验证器,并在来自字符串的每封电子邮件上调用验证,但由于某种原因它不起作用(AbuseEmailValidator 无法得到我的谓词 x => x - 在每封电子邮件上调用 validator.Validate 时)。

public class AbuseEmailValidator : AbstractValidator<string>
{
public AbuseEmailValidator()
{
RuleFor(x => x).EmailAddress().WithMessage("Email address is not valid");
}
}

有没有办法以某种简单的方式做到这一点?类似于此解决方案,但使用一个字符串而不是字符串列表,因为我不能使用 SetCollectionValidator(或者我可以吗?):How do you validate against each string in a list using Fluent Validation?

最佳答案

你可以尝试这样的事情:

public class InvoiceValidator : AbstractValidator<ContractInvoicingEditModel>
{
public InvoiceValidator()
{
RuleFor(m => m.EmailAddressTo)
.Must(CommonValidators.CheckValidEmails).WithMessage("Some of the emails provided are not valid");
}
}

public static class CommonValidators
{
public static bool CheckValidEmails(string arg)
{
var list = arg.Split(';');
var isValid = true;
var emailValidator = new EmailValidator();

foreach (var t in list)
{
isValid = emailValidator.Validate(new EmailModel { Email = t.Trim() }).IsValid;
if (!isValid)
break;
}

return isValid;
}
}
public class EmailValidator : AbstractValidator<EmailModel>
{
public EmailValidator()
{
RuleFor(x => x.Email).EmailAddress();
}
}

public class EmailModel
{
public string Email { get; set; }
}

如果你使用中介poco,它似乎工作正常。我的电子邮件以“;”分隔在这种情况下。希望对您有所帮助。

关于c# - 针对包含逗号分隔电子邮件的字符串进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12320017/

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