NejCommon.NET/Validation/RegexAttribute.cs
2025-06-20 18:43:36 +02:00

36 lines
1.1 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.Text.Json;
using System.Text.RegularExpressions;
using Microsoft.OpenApi.Models;
namespace NejCommon.Validation;
public class RegexAttribute : NejValidationAttribute
{
public override string ExampleJson { get; }
public string Pattern { get; }
public RegexAttribute(string pattern, string example, string errorMsg = null)
{
Pattern = pattern;
ExampleJson = JsonSerializer.Serialize(example);
ErrorMessage = errorMsg ?? $"Invalid format (must match {pattern})";
}
protected override ValidationResult IsValid(object value, ValidationContext ctx)
{
if (value is null)
return ValidationResult.Success!;
var str = value as string;
if (string.IsNullOrWhiteSpace(str) || !Regex.IsMatch(str, Pattern))
return new ValidationResult(ErrorMessage);
return ValidationResult.Success!;
}
public override void ApplySchema(OpenApiSchema schema)
{
base.ApplySchema(schema);
schema.Pattern = Pattern;
}
}