Ir al contenido principal

Métodos de Cadenas

Esta página cubre todos los métodos relacionados con strings disponibles en ValiFlow<T>. Están definidos en StringExpression<TBuilder, T> y son accesibles directamente desde tu instancia del builder ValiFlow<T>.

Ejemplos: ValiFlow · Evaluators


Longitud​

MinLength​

Pasa cuando el string tiene al menos N caracteres. Retorna false para null.

var rule = new ValiFlow<User>()
.MinLength(x => x.Name, 3);

MaxLength​

Pasa cuando el string tiene como máximo N caracteres. Retorna true para null.

var rule = new ValiFlow<User>()
.MaxLength(x => x.Name, 100);

LengthBetween​

Pasa cuando la longitud del string se encuentra dentro del rango inclusivo [min, max].

var rule = new ValiFlow<User>()
.LengthBetween(x => x.Name, 3, 100);

ExactLength​

Pasa cuando el string tiene exactamente N caracteres.

var rule = new ValiFlow<Order>()
.ExactLength(x => x.PostalCode, 5);

Null / Empty / Whitespace​

IsNullOrEmpty​

Pasa cuando el valor es null o un string vacío ("").

var rule = new ValiFlow<User>()
.IsNullOrEmpty(x => x.Description);

IsNotNullOrEmpty​

Pasa cuando el valor no es null ni "".

var rule = new ValiFlow<User>()
.IsNotNullOrEmpty(x => x.Name);

IsNullOrWhiteSpace​

Pasa cuando el valor es null, "", o contiene únicamente caracteres de espacio en blanco.

var rule = new ValiFlow<Product>()
.IsNullOrWhiteSpace(x => x.Code);

IsNotNullOrWhiteSpace​

Pasa cuando el valor contiene al menos un carácter que no sea espacio en blanco.

var rule = new ValiFlow<Product>()
.IsNotNullOrWhiteSpace(x => x.Code);

IsTrimmed​

Pasa cuando el valor no tiene espacios en blanco al inicio ni al final (equivalente a value == value.Trim()). Retorna true para null.

var rule = new ValiFlow<User>()
.IsTrimmed(x => x.Name);

Contenido​

Contains (selector único)​

Pasa cuando el string contiene la subcadena indicada. Por defecto usa StringComparison.OrdinalIgnoreCase.

// Sin distinción de mayúsculas (por defecto)
var rule = new ValiFlow<Product>()
.Contains(x => x.Name, "test");

// Con comparación explícita
var rule = new ValiFlow<Product>()
.Contains(x => x.Name, "test", StringComparison.Ordinal);

Nota: string.Contains(string, StringComparison) no es traducible por EF Core.

Contains (múltiples selectores)​

Pasa cuando la subcadena se encuentra en cualquiera de las propiedades string indicadas (semántica OR). Internamente usa ToLower() más Contains de un solo argumento.

var rule = new ValiFlow<Product>()
.Contains("widget", x => x.Name, x => x.Description, x => x.Tags);

Nota: Solo en memoria — no traducible por EF Core.

StartsWith​

Pasa cuando el string comienza con el prefijo indicado. Por defecto usa OrdinalIgnoreCase.

var rule = new ValiFlow<Order>()
.StartsWith(x => x.Reference, "ORD");

EndsWith​

Pasa cuando el string termina con el sufijo indicado. Por defecto usa OrdinalIgnoreCase.

var rule = new ValiFlow<User>()
.EndsWith(x => x.Email, ".com");

EqualsIgnoreCase​

Pasa cuando el string es igual al valor objetivo sin distinción de mayúsculas (StringComparison.OrdinalIgnoreCase).

var rule = new ValiFlow<Product>()
.EqualsIgnoreCase(x => x.Code, "ABC");

IsUpperCase​

Pasa cuando todos los caracteres alfabéticos del string están en mayúsculas.

var rule = new ValiFlow<Product>()
.IsUpperCase(x => x.Code);

IsLowerCase​

Pasa cuando todos los caracteres alfabéticos del string están en minúsculas.

var rule = new ValiFlow<Product>()
.IsLowerCase(x => x.Slug);

HasOnlyDigits​

Pasa cuando el string no está vacío y contiene únicamente dígitos (0–9).

var rule = new ValiFlow<User>()
.HasOnlyDigits(x => x.Pin);

HasOnlyLetters​

Pasa cuando el string no está vacío y contiene únicamente letras.

var rule = new ValiFlow<User>()
.HasOnlyLetters(x => x.Name);

HasLettersAndNumbers​

Pasa cuando el string contiene al menos una letra y al menos un dígito.

var rule = new ValiFlow<User>()
.HasLettersAndNumbers(x => x.Password);

HasSpecialCharacters​

Pasa cuando el string contiene al menos un carácter que no sea letra ni dígito.

var rule = new ValiFlow<User>()
.HasSpecialCharacters(x => x.Password);

Validadores de Formato​

Todos los validadores de formato usan patrones de regex compilados definidos en RegularExpressions/RegularExpression.cs. Se evalúan en memoria.

IsEmail​

Pasa cuando el valor tiene un formato de correo electrónico estándar.

var rule = new ValiFlow<User>()
.IsEmail(x => x.Email);

IsUrl​

Pasa cuando el valor es una URL HTTP/HTTPS válida.

var rule = new ValiFlow<User>()
.IsUrl(x => x.Website);

IsGuid​

Pasa cuando el valor es un string GUID válido (con o sin guiones).

var rule = new ValiFlow<Order>()
.IsGuid(x => x.ExternalId);

IsPhoneNumber​

Pasa cuando el valor coincide con un patrón de número telefónico internacional o local.

var rule = new ValiFlow<User>()
.IsPhoneNumber(x => x.Phone);

IsJson​

Pasa cuando el valor parece ser un objeto o array JSON válido (verificación estructural de patrón, sin parseo completo).

var rule = new ValiFlow<Order>()
.IsJson(x => x.Payload);

NotJson​

Pasa cuando el valor no coincide con el patrón JSON.

var rule = new ValiFlow<Order>()
.NotJson(x => x.Value);

IsBase64​

Pasa cuando el valor es un string codificado en Base64 válido.

var rule = new ValiFlow<User>()
.IsBase64(x => x.Token);

NotBase64​

Pasa cuando el valor no es un string codificado en Base64 válido.

var rule = new ValiFlow<Order>()
.NotBase64(x => x.Value);

IsCreditCard​

Pasa cuando el valor coincide con un patrón de número de tarjeta de crédito compatible con Luhn (dígitos, con espacios u guiones opcionales).

var rule = new ValiFlow<Order>()
.IsCreditCard(x => x.CardNumber);

IsIPv4​

Pasa cuando el valor es una dirección IPv4 válida (p. ej. 192.168.1.1).

var rule = new ValiFlow<Order>()
.IsIPv4(x => x.IpAddress);

IsIPv6​

Pasa cuando el valor es una dirección IPv6 válida.

var rule = new ValiFlow<Order>()
.IsIPv6(x => x.IpAddress);

IsHexColor​

Pasa cuando el valor es un color hexadecimal CSS válido en formato #RGB o #RRGGBB.

var rule = new ValiFlow<Product>()
.IsHexColor(x => x.Color);

IsSlug​

Pasa cuando el valor contiene únicamente letras minúsculas, dígitos y guiones (formato de slug para URLs).

var rule = new ValiFlow<Product>()
.IsSlug(x => x.UrlSlug);

Coincidencia de Patrones​

RegexMatch​

Pasa cuando el valor coincide con la expresión regular proporcionada.

var rule = new ValiFlow<Order>()
.RegexMatch(x => x.PostalCode, @"^\d{5}$");

MatchesWildcard​

Pasa cuando el valor coincide con un patrón wildcard donde * representa cualquier secuencia de caracteres y ? representa exactamente un carácter.

var rule = new ValiFlow<Order>()
.MatchesWildcard(x => x.FileName, "report_*.pdf");

Nota: Solo en memoria — no traducible por EF Core.

IsOneOf​

Pasa cuando el valor coincide exactamente con una de las entradas de la lista proporcionada. Un parámetro StringComparison opcional controla la distinción de mayúsculas (por defecto OrdinalIgnoreCase).

var rule = new ValiFlow<User>()
.IsOneOf(x => x.Status, ["active", "inactive", "pending"]);

// Con distinción de mayúsculas
var rule = new ValiFlow<User>()
.IsOneOf(x => x.Role, ["Admin", "Editor"], StringComparison.Ordinal);

Nota: Solo en memoria — no traducible por EF Core.


Ejemplo combinado​

La siguiente regla valida una entidad User cubriendo los requisitos de string más comunes:

var rule = new ValiFlow<User>()
.IsNotNullOrWhiteSpace(x => x.Name)
.MinLength(x => x.Name, 2)
.MaxLength(x => x.Name, 100)
.IsEmail(x => x.Email)
.IsOneOf(x => x.Role, ["admin", "editor", "viewer"])
.MinLength(x => x.Password, 8)
.HasLettersAndNumbers(x => x.Password);

bool isValid = rule.Evaluate(user);

// O construir el árbol de expresiones para usar con LINQ
Expression<Func<User, bool>> expr = rule.Build();
var validUsers = dbContext.Users.Where(expr).ToList(); // solo métodos no en-memoria

Mini ejemplos​

1) Email básico + dominio​

var regla = new ValiFlow<User>()
.IsEmail(u => u.Email)
.EndsWith(u => u.Email, "@company.com");

2) Buscar en varios campos (en memoria)​

var regla = new ValiFlow<Product>()
.Contains("wireless", x => x.Name, x => x.Description, x => x.Tags);