输入数据验证器(良好的实践)



我在一个从用户接收数据的应用程序上工作,我试图为它编写一个验证器函数,但我不确定这是否是正确的方法。

示例:用户将输入一个数字(作为字符串,不要问我为什么不用int型,让它是一个字符串),我们说& 103&;,我将在函数中使用这个数字,但首先,在函数的开头,我调用一个验证器函数:

private bool ValidateCommandCode(string code)
{
bool isValid = false;
byte commandByte = new byte();
if (byte.TryParse(code, out commandByte))
{
isValid = true;
}
else
{
Log.Error($"Command number {CommandCode} for the request is not valid!");
isValid = false;
}
return isValid;
}
private async void MainFunction()
{
if (ValidateCommandCode(CommandCode) == false)
return;
// ... do the magic with the CommandCode ...
}

以同样的方式,我想验证另一个由用户填充的字段:数据例:000A000B

private bool ValidateRequestData(string data)
{
bool isValid = false;

if (!String.IsNullOrEmpty(Payload) && !String.IsNullOrWhiteSpace(Payload))
{
if (Payload.Trim().Replace(" ", "").Length % 2 != 0)
{
Log.Error($"Payload (Data) {Payload} for the request doesn't have an even number of bytes!");
isValid = false;
}
else
{
isValid = true;
}
}
else
{
isValid = true;
}
return isValid;
}

这是继续下去的好方法吗?不是有那么多标志& &;isvalidate &;太混乱了?

我将创建一个单独的验证类,并通过向验证器传递一个日志记录器来解耦日志记录。

public interface ILogger
{
void Error(string message);
}
public class Logger : ILogger
{
public void Error(string message) { }
}
public class LoggingValidator
{
private readonly ILogger _logger;
// Payload looks like a hex number, so we check this.
private static readonly Regex _payloadExp = new Regex(@"^s*([0-9A-F]{2} *)+s*$", RegexOptions.Compiled);
public LoggingValidator(ILogger logger)
{
_logger = logger;
}

public bool CheckCommand(string value)
{
if (byte.TryParse(value, out _))  // Discard operator _
return true;
_logger.Error("Your message.");
return false;
}
public bool CheckPayload(string value)
{
if (_payloadExp.IsMatch(value ?? ""))
return true;
_logger.Error("Your message.");
return false;
}
}
public class Program
{
private static void Main(string[] args)
{
var validator = new LoggingValidator(new Logger());
string value = "123";
if (validator.CheckCommand(value)) { /* ... */ }
if (validator.CheckPayload(value)) { /* ... */ }
}
}

相关内容

  • 没有找到相关文章

最新更新