diff --git a/Validators/LatinValidators.cs b/Validators/LatinValidators.cs index a6846d2e..27aa6647 100644 --- a/Validators/LatinValidators.cs +++ b/Validators/LatinValidators.cs @@ -1,4 +1,6 @@ -using System.Text.RegularExpressions; +using System; +using System.Text; +using System.Text.RegularExpressions; using FluentValidation; using FluentValidation.Validators; @@ -8,9 +10,8 @@ public abstract class LatinBaseValidator : PropertyValidator { private readonly Charsets _charset; - public LatinBaseValidator(Charsets charset) - : base($"Testo contenente caratteri non validi ({(charset == Charsets.BasicLatin ? "Unicode Basic Latin" : "Unicode Latin-1 Supplement")})") + : base($"Testo contenente caratteri non validi ({(charset == Charsets.BasicLatin ? "Unicode Basic Latin" : "Unicode Latin-1 Supplement")}). valori non accettati: {{NonLatinCode}}") { _charset = charset; } @@ -30,6 +31,35 @@ protected override bool IsValid(PropertyValidatorContext context) } return Regex.Match(context.PropertyValue.ToString(), challenge).Success; } + + protected override void PrepareMessageFormatterForValidationError(PropertyValidatorContext context) + { + base.PrepareMessageFormatterForValidationError(context); + + var sb = new StringBuilder(); + foreach (var c in context.PropertyValue.ToString()) + { + int upperLimit; + switch (_charset) + { + case Charsets.BasicLatin: + upperLimit = 0x7F; + break; + case Charsets.Latin1Supplement: + upperLimit = 0xFF; + break; + default: + throw new ArgumentOutOfRangeException(); + } + + if (c > upperLimit) + { + sb.Append(c); + } + } + + context.MessageFormatter.AppendArgument("NonLatinCode", sb.ToString()); + } } public class BasicLatinValidator : LatinBaseValidator