DataValidator foi projetado para ser uma biblioteca simples de validação de dados.
Support: [email protected]
Para instalar em seu projeto usando boss:
$ boss install github.com/dliocode/datavalidatorAdicione 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('[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;
- 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;
-
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 |