Files
radzen-blazor/Radzen.Blazor/RadzenRegexValidator.cs

61 lines
3.0 KiB
C#

using Microsoft.AspNetCore.Components;
using System;
using System.ComponentModel.DataAnnotations;
namespace Radzen.Blazor
{
/// <summary>
/// A validator component that ensures a text input matches a specified regular expression pattern.
/// RadzenRegexValidator is useful for validating formats like ZIP codes, phone numbers, custom IDs, or any pattern-based data.
/// Must be placed inside a <see cref="RadzenTemplateForm{TItem}"/>.
/// Checks input against a regular expression pattern using .NET's RegularExpressionAttribute.
/// Common use cases include ZIP/postal codes (e.g., "\d{5}" for US ZIP), phone numbers (e.g., "\d{3}-\d{3}-\d{4}"), custom ID formats (e.g., "^[A-Z]{2}\d{6}$"), and alphanumeric constraints (e.g., "^[a-zA-Z0-9]+$").
/// The validator passes when the value matches the entire pattern (implicit anchoring). Empty or null values are considered valid - combine with RadzenRequiredValidator to ensure the field is filled.
/// </summary>
/// <example>
/// ZIP code validation:
/// <code>
/// &lt;RadzenTemplateForm TItem="Model" Data=@model&gt;
/// &lt;RadzenTextBox style="display: block" Name="ZIP" @bind-Value=@model.Zip /&gt;
/// &lt;RadzenRegexValidator Component="ZIP" Pattern="^\d{5}$" Text="ZIP code must be 5 digits" Style="position: absolute" /&gt;
/// &lt;/RadzenTemplateForm&gt;
/// @code {
/// class Model { public string Zip { get; set; } }
/// Model model = new Model();
/// }
/// </code>
/// Phone number validation:
/// <code>
/// &lt;RadzenTextBox Name="Phone" @bind-Value=@model.Phone /&gt;
/// &lt;RadzenRegexValidator Component="Phone" Pattern="^\d{3}-\d{3}-\d{4}$" Text="Format: 123-456-7890" /&gt;
/// </code>
/// </example>
public class RadzenRegexValidator : ValidatorBase
{
/// <summary>
/// Gets or sets the error message displayed when the component value does not match the pattern.
/// Customize this to provide clear guidance on the expected format.
/// </summary>
/// <value>The validation error message. Default is "Value should match".</value>
[Parameter]
public override string Text { get; set; } = "Value should match";
/// <summary>
/// Gets or sets the regular expression pattern that the component value must match.
/// Use standard .NET regex syntax. The pattern should match the entire value (implicit full-string match).
/// Example patterns: "^\d{5}$" (5 digits), "^[A-Z]{3}\d{4}$" (3 letters + 4 digits).
/// </summary>
/// <value>The regex pattern string.</value>
[Parameter]
public string? Pattern { get; set; }
/// <inheritdoc />
protected override bool Validate(IRadzenFormComponent component)
{
ArgumentNullException.ThrowIfNull(component);
ArgumentNullException.ThrowIfNull(Pattern);
return new RegularExpressionAttribute(Pattern).IsValid(component.GetValue());
}
}
}