gpt4 book ai didi

c# - 为每个提供商实现电子邮件验证的正确设计模式是什么?

转载 作者:行者123 更新时间:2023-12-02 22:43:35 25 4
gpt4 key购买 nike

我必须通过多个验证器来验证电子邮件。我有一个类 (EmailValidator),其中包含验证器列表(RegexValidatorMXValidator...),它通过该验证器验证电子邮件。例如,RegexValidator 对每个提供者都有自己的验证器。如果它识别出这是 gmail,那么它检查它是否匹配特定的模式,如果它是 mygmail,那么它检查它是否匹配 mygmail 的模式,否则它返回 true。MXValidator 将验证其他内容。

实现它的正确设计模式是什么?

public interface IValidator
{
bool Validate(string email);
}
public class RegexValidator : IValidator
{
private const string EMAIL_REGEX = @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b";
public bool Validate(string email)
{
var regex = new Regex(EMAIL_REGEX);
var isEmailFormat regex.IsMatch(email);
if(isEmailFormat)
{
//here it should recognize the provider and check if it match the provider's pattern
}

return true;
}
}

最佳答案

Chain of Responsibility.

一旦一个验证器发现无效模式,就返回 false。您传递一个有序验证器列表。

bool ValidateEmail(string email, IEnumerable<IValidator> validators, ref errorMessage)
{
return !validators.Any(v => !v.Validate(email, ref errorMessage);
}

假设

interface IValidator
{
bool Validate(object value, ref errorMessage);
}

更新

我看到这是作为另一个验证器实现的:

public class EmailDomainValidator : IValidator
{

public EmailDomainValidator(string domain)
{
_domain = domain;
}

...
}

关于c# - 为每个提供商实现电子邮件验证的正确设计模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10397732/

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