Giter VIP home page Giter VIP logo

datavalidator's Introduction

DataValidator


DataValidator

DataValidator foi projetado para ser uma biblioteca simples de validação de dados.

Support: [email protected]

Instalação

Para instalar em seu projeto usando boss:

$ boss install github.com/dliocode/datavalidator

Instalação Manual

Adicione as seguintes pastas ao seu projeto, em Project > Options > Delphi Compiler > Search path

../datavalidator/src/core
../datavalidator/src/sanitializators
../datavalidator/src/validators

Samples

Como usar

Uses necessária

uses DataValidator;

Tipos de Validação

  • Values
  • JSON

Values

  • 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('[email protected]')
      .Trim
      .&Not.IsEmpty.WithMessage('Você não informou o seu e-mail!')
      .IsEmail.WithMessage('Não é um e-mail válido!')
      .NormalizeEmail
  .&End

  .Check;  

JSON

  • 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":"[email protected]"}') 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;

Informações

Diferença de Check e 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.

Como saber se houve error

    Result := LResult.Ok; // True = Nenhum erro | False = Tem erro

Como recuperar a mensagem com erro

    Result := LResult.Informations.Message;

Como recuperar uma única mensagem de error

    Result := LResult.Informations.GetItem(0).Message;

Como recuperar a quantidade de errors

    Result := LResult.Informations.Count;

Como recuperar o valor analizado

    Result := LResult.Values[0]; // Recupera o primeiro valor

Validação Schema

  • É 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.

Sanitizers

  • Sanitizer é o tratamento de um valor.

  • Exemplo: Sanitizers MD5: Pega o valor do validate e converte para MD5

TDataValidator.Values

  .Validate('APELIDO')
    .ToMD5
  .&End

Validators Especiais

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!

Validators / Sanitizers

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

datavalidator's People

Contributors

dliocode avatar nelsonhalmeida avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.