Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การ Validate MinLength และ MaxLength ด้วย FluentValidation ใน C#

FluentValidation เป็น Library ยอดนิยมสำหรับ Validation แบบ Strongly-typed Fluent Interface ใน .NET

ติดตั้ง

dotnet add package FluentValidation
// หรือ PackageReference
<PackageReference Include="FluentValidation" Version="11.9.0" />

Validators สำหรับ String Length

Method ความหมาย Placeholder
MaximumLength(n) ความยาวต้อง ≤ n {MaxLength}, {TotalLength}, {PropertyName}, {PropertyValue}
MinimumLength(n) ความยาวต้อง ≥ n {MinLength}, {TotalLength}, {PropertyName}, {PropertyValue}
Length(min, max) ความยาวต้องอยู่ระหว่าง min-max {MinLength}, {MaxLength}, {TotalLength}, {PropertyName}, {PropertyValue}

ตัวอย่างโค้ดเต็ม

using FluentValidation;
using FluentValidation.Results;
using System;
using System.Collections.Generic;

public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class PersonValidator : AbstractValidator<PersonModel>
{
    public PersonValidator()
    {
        // FirstName: Max 7 ตัวอักษร
        RuleFor(p => p.FirstName)
            .MaximumLength(7)
            .WithMessage("'{PropertyName}' ต้องไม่เกิน {MaxLength} ตัวอักษร (ปัจจุบัน: {TotalLength})");
            
        // LastName: Min 5 ตัวอักษร
        RuleFor(p => p.LastName)
            .MinimumLength(5)
            .WithMessage("'{PropertyName}' ต้องมีอย่างน้อย {MinLength} ตัวอักษร (ปัจจุบัน: {TotalLength})");
            
        // รวม: Length ระหว่าง 2-50
        RuleFor(p => p.FirstName)
            .Length(2, 50)
            .WithMessage("'{PropertyName}' ความยาวต้องอยู่ระหว่าง {MinLength}-{MaxLength} ตัวอักษร");
    }
}

static void Main()
{
    var person = new PersonModel
    {
        FirstName = "TestUser444", // 11 chars - เกิน Max 7
        LastName = "TTT"           // 3 chars - น้อยกว่า Min 5
    };
    
    var validator = new PersonValidator();
    ValidationResult result = validator.Validate(person);
    
    if (!result.IsValid)
    {
        foreach (var failure in result.Errors)
        {
            Console.WriteLine($"[{failure.PropertyName}] {failure.ErrorMessage}");
        }
    }
    else
    {
        Console.WriteLine("Validation Passed!");
    }
}

ผลลัพธ์

[FirstName] 'FirstName' ต้องไม่เกิน 7 ตัวอักษร (ปัจจุบัน: 11)
[LastName] 'LastName' ต้องมีอย่างน้อย 5 ตัวอักษร (ปัจจุบัน: 3)

Advanced: Cascade Mode

RuleFor(p => p.FirstName)
    .Cascade(CascadeMode.StopOnFirstFailure) // หยุดที่ Rule แรกที่ Fail
    .NotEmpty()
    .MaximumLength(50)
    .Matches("^[a-zA-Z ]+$"); // Regex

Best Practices

  • แยก Validator Class ต่อ Model (Single Responsibility)
  • ใช้ WithMessage กับ Placeholders ให้ข้อความชัดเจน
  • ใน ASP.NET Core: services.AddFluentValidationAutoValidation() + services.AddValidatorsFromAssemblyContaining<Program>()
  • รองรับ Async Validation: MustAsync, CustomAsync
  • Localization: ใช้ WithMessage กับ Resource Files

สรุป

  • MaximumLength: ขีดจำกัดบน
  • MinimumLength: ขีดจำกัดล่าง
  • Length(min, max): ช่วง (Inclusive)
  • Placeholders ช่วยให้ Error Message Dynamic และ Informative