Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dliocode/datavalidator
DataValidator foi projetado para ser uma biblioteca simples de validação de dados.
https://github.com/dliocode/datavalidator
contains customvalue datavalidator delphi endswith isalpha isalphanumeric isascii isbase32 isbase58 isbase64 isbetween isphone json pascal validator
Last synced: about 2 months ago
JSON representation
DataValidator foi projetado para ser uma biblioteca simples de validação de dados.
- Host: GitHub
- URL: https://github.com/dliocode/datavalidator
- Owner: dliocode
- License: mit
- Created: 2021-05-03T11:53:32.000Z (over 3 years ago)
- Default Branch: v2
- Last Pushed: 2023-04-21T19:48:19.000Z (over 1 year ago)
- Last Synced: 2024-05-01T17:02:50.041Z (8 months ago)
- Topics: contains, customvalue, datavalidator, delphi, endswith, isalpha, isalphanumeric, isascii, isbase32, isbase58, isbase64, isbetween, isphone, json, pascal, validator
- Language: Pascal
- Homepage:
- Size: 307 KB
- Stars: 50
- Watchers: 5
- Forks: 12
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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](https://github.com/HashLoad/boss):
```sh
$ 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
* Veja alguns exemplos: [samples](https://github.com/dliocode/datavalidator/tree/v2/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 | | |