DataValidator foi projetado para ser uma biblioteca simples de validação de dados.
Support: developer.dlio@gmail.com
Para instalar em seu projeto usando boss:
$ boss install github.com/dliocode/datavalidator
Adicione as seguintes pastas ao seu projeto, em Project > Options > Delphi Compiler > Search path
../datavalidator/src/core
../datavalidator/src/sanitializators
../datavalidator/src/validators
- Veja alguns exemplos: samples
uses DataValidator;
- Values
- JSON
- No modo values, o valor informado no validate é o que será analisado!
var
LResult: IDataValidatorResult;
begin
LResult :=
TDataValidator.Values
.Validate('APELIDO')
.Trim
.&Not.IsEmpty.WithMessage('Você não informou o seu apelido!')
.IsAlpha(TDataValidatorLocaleLanguage.tl_pt_BR).WithMessage('Seu apelido deve conter apenas letras!')
.IsLength(1, 10).WithMessage('O apelido deve ter no máximo 10 caracteres!')
.&End
.Validate('developer.dlio@gmail.com')
.Trim
.&Not.IsEmpty.WithMessage('Você não informou o seu e-mail!')
.IsEmail.WithMessage('Não é um e-mail válido!')
.NormalizeEmail
.&End
.Check;
- No modo JSON, o que deve ser informado validate é o nome da key do json!
- Caso seja utilizado algum sanitizer, o valor dentro do JSON será modificado!
var
LJO: TJSONObject;
LResult: IDataValidatorResult;
begin
LJO := TJSONObject.ParseJSONValue('{"apelido":"DLIO", "email":"developer.dlio@gmail.com"}') as TJSONObject;
LResult :=
TDataValidator.JSON(AJO)
.Validate('apelido')
.Value
.Trim
.&Not.IsEmpty.WithMessage('Você não informou o seu apelido!')
.IsAlpha(TDataValidatorLocaleLanguage.tl_pt_BR).WithMessage('Seu apelido deve conter apenas letras!')
.IsLength(1, 10).WithMessage('O apelido deve ter no máximo 10 caracteres!')
.&End
.&End
.Validate('email')
.Value
.Trim
.&Not.IsEmpty.WithMessage('Você não informou o seu e-mail!')
.IsEmail.WithMessage('Não é um e-mail válido!')
.NormalizeEmail
.&End
.&End
.Validate('login')
.Key // Faz a validação somente da key
.IsRequired.WithMessage('É obrigatório ter a Key "login" no JSON.')
.&End
.Value // Faz a validação somente do valor dentro da Key 'login'
.Trim
.&Not.IsEmpty.WithMessage('Você não informou o login!')
.IsAlpha(TDataValidatorLocaleLanguage.tl_pt_BR).WithMessage('Seu login deve conter apenas letras!')
.IsLength(1, 10).WithMessage('O login deve ter no máximo 10 caracteres!')
.&End
.&End
.Validate('nome')
.Key
.IsOptionalKey // É opcional - se existir a Key "nome" ele faz a validação
.&End
.Value
.Trim
.&Not.IsEmpty.WithMessage('Você não informou o nome!')
.IsAlpha(TDataValidatorLocaleLanguage.tl_pt_BR).WithMessage('Seu nome deve conter apenas letras!')
.IsLength(1, 10).WithMessage('O nome deve ter no máximo 10 caracteres!')
.&End
.&End
.CheckAll;
-
Check: Faz a verificação de todos os validate, mas se houver um item com retorno false ele interrompe, retornando uma única mensagem com erro se tiver!
-
CheckAll: Faz a verificação de todos os validate, retornando todas mensagens com erro se tiver!
Usando o CheckAll(TDataValidatorCheckAll.tcFirst)
ele retornar apenas a primeira mensagem de erro de cada validate.
Result := LResult.Ok; // True = Nenhum erro | False = Tem erro
Result := LResult.Informations.Message;
Result := LResult.Informations.GetItem(0).Message;
Result := LResult.Informations.Count;
Result := LResult.Values[0]; // Recupera o primeiro valor
- É uma forma de criar um esqueleto de validação e conseguir reutilizar em outras validações.
function SchemaNome(const AField: string): IDataValidatorSchemaContext;
begin
Result :=
TDataValidator.Schema
.Validate
.Trim
.&Not.IsEmpty.WithMessage('Preencha o campo %s !', [AField]) // Não pode ser vazio
.IsLength(2, 10).WithMessage('O campo %s deve conter entre 2 a 10 caracteres!', [AField])
.IsAlpha(TDataValidatorLocaleLanguage.tl_pt_BR).WithMessage('O campo %s possui caracteres inválidos!', [AField])
.&End;
end;
function SchemaEmail(const AField: string): IDataValidatorSchemaContext;
begin
Result :=
TDataValidator.Schema
.Validate
.Trim
.&Not.IsEmpty.WithMessage('O %s não pode ser vazio!',[AField])
.IsLength(2, 999).WithMessage('O campo %s deve ter mais de 6 caracteres!', [AField])
.IsEmail.WithMessage('Não é um %s válido!',[AField])
.NormalizeEmail
.&End;
end;
begin
TDataValidator.Values
.Validate(ANome)
.AddSchema(SchemaNome('Nome'))
.&End
.Validate(AApelido)
.AddSchema(SchemaNome('Apelido'))
.IsUppercase.WithMessage('O apelido (${value}) deve ser digitado tudo em maiúscula!') // Add outra validação
.&End
.Validate(AEmail)
.AddSchema(SchemaEmail('E-mail'))
.&End
.Validate(AEmailConfirmacao)
.AddSchema(SchemaEmail('E-mail de confirmação'))
.&End
.CheckAll;
end.
-
Sanitizer é o tratamento de um valor.
-
Exemplo: Sanitizers MD5: Pega o valor do validate e converte para MD5
TDataValidator.Values
.Validate('APELIDO')
.ToMD5
.&End
Nome | Informação |
---|---|
Not | Quando usado esse validador, ele nega o resultado do validador. Ex: Validate('email').&Not.IsEmpty Se entende que o valor não deve ser vazio. |
Execute | Define o que deve ser executado se aquele validate não passar na validação. A execução dessa procedure é forma manual. Ex: CheckAll.Informations.GetItem(0).OnExecute; |
WithMessage | Define a mensagem do error. Para adicionar na mensagem o valor validado, basta adicionar a tag ${value}. Ex: IsEmail.WithMessage('E-mail ${value} está inválido!'). output: E-mail null@@null está inválido! |
Validação para values | Validação JSON (Key/Value) | Sanitizers para values |
---|---|---|
CustomValue | (Key) IsOptional | CustomSanitizer |
Contains | (Key) IsRequired | NormalizeEmail |
EndsWith | (Value) CustomJSONValue | OnlyNumbers |
IsAlpha | (Value) IsJSONNull | RemoveAccents |
IsAlphaNumeric | (Value) IsJSONBoolean | Replace |
IsAscii | (Value) IsJSONNumeric | ToBase64Decode |
IsBase32 | (Value) IsJSONString | ToBase64Encode |
IsBase58 | (Value) MinItems | ToDate |
IsBase64 | (Value) MaxItems | ToDateTime |
IsBetween | (Value) + Validação para values | ToHTMLDecode |
IsBoolean | ToHTMLEncode | |
IsBTCAddress | ToInteger | |
IsCNPJ | ToLowerCase | |
IsCPF | ToMD5 | |
IsCPFCNPJ | ToNumeric | |
IsDate | ToTime | |
IsDateBetween | ToUpperCase | |
IsDateEquals | ToURLDecode | |
IsDateGreaterThan | ToURLEncode | |
IsDateLessThan | Trim | |
IsDateTime | TrimLeft | |
IsEmail | TrimRight | |
IsEmpty | ||
IsEquals | ||
IsEthereumAddress | ||
IsGreaterThan | ||
IsGTIN | ||
IsGTIN8 | ||
IsGTIN12 | ||
IsGTIN13 | ||
IsGTIN14 | ||
IsHexadecimal | ||
IsHexColor | ||
IsInteger | ||
IsIP | ||
IsIPv4 | ||
IsIPv6 | ||
IsISO8601 | ||
IsJSON | ||
IsJSONArray | ||
IsJSONObject | ||
IsJWT | ||
IsLatLong | ||
IsLength | ||
IsLessThan | ||
IsLocale | ||
IsLowercase | ||
IsMACAddress | ||
IsMagnetURI | ||
IsMD5 | ||
IsMimeType | ||
IsMongoId | ||
IsNegative | ||
IsNumeric | ||
IsOptional | ||
IsOctal | ||
IsPassportNumber | ||
IsPhoneNumber | ||
IsPort | ||
IsPositive | ||
IsPostalCode | ||
IsRGBColor | ||
IsSSN | ||
IsTime | ||
IsTimeBetween | ||
IsTimeEquals | ||
IsTimeGreaterThan | ||
IsTimeLessThan | ||
IsUppercase | ||
IsURL | ||
IsUUID | ||
IsUUIDv1 | ||
IsUUIDv2 | ||
IsUUIDv3 | ||
IsUUIDv4 | ||
IsUUIDv5 | ||
IsZero | ||
RegexIsMatch | ||
StartsWith |