Skip to content

Commit

Permalink
Show non valid latin code characters when LatinValidator fails.
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelmairegger committed Apr 9, 2019
1 parent 443cb17 commit 166b8ae
Showing 1 changed file with 33 additions and 3 deletions.
36 changes: 33 additions & 3 deletions 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;

Expand All @@ -8,9 +10,8 @@ public abstract class LatinBaseValidator<T> : 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;
}
Expand All @@ -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<T> : LatinBaseValidator<T>
Expand Down

0 comments on commit 166b8ae

Please sign in to comment.