All Projects → concretesolutions → Canarinho

concretesolutions / Canarinho

Licence: apache-2.0
Utilitários Android para padrões Brasileiros

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Canarinho

Validation
🔒 Laravel farsi/persian validation
Stars: ✭ 142 (-12.35%)
Mutual labels:  validation
Redux Form Validators
redux-form-validators
Stars: ✭ 152 (-6.17%)
Mutual labels:  validation
Expand
DevExpress XAF extension framework. 𝗹𝗶𝗻𝗸𝗲𝗱𝗶𝗻.𝗲𝘅𝗽𝗮𝗻𝗱𝗳𝗿𝗮𝗺𝗲𝘄𝗼𝗿𝗸.𝗰𝗼𝗺, 𝘆𝗼𝘂𝘁𝘂𝗯𝗲.𝗲𝘅𝗽𝗮𝗻𝗱𝗳𝗿𝗮𝗺𝗲𝘄𝗼𝗿𝗸.𝗰𝗼𝗺 and 𝘁𝘄𝗶𝘁𝘁𝗲𝗿 @𝗲𝘅𝗽𝗮𝗻𝗱𝗳𝗿𝗮𝗺𝗲𝘄𝗼𝗿𝗸 and or simply 𝗦𝘁𝗮𝗿/𝘄𝗮𝘁𝗰𝗵 this repository and get notified from 𝗚𝗶𝘁𝗛𝘂𝗯
Stars: ✭ 158 (-2.47%)
Mutual labels:  validation
Validation
Framework agnostic validation library for PHP
Stars: ✭ 146 (-9.88%)
Mutual labels:  validation
Grimoire
Database access layer for golang
Stars: ✭ 151 (-6.79%)
Mutual labels:  validation
Formhelper
ASP.NET Core - Transform server-side validations to client-side without writing any javascript code. (Compatible with Fluent Validation)
Stars: ✭ 155 (-4.32%)
Mutual labels:  validation
Fluentvalidation.blazor
Fluent Validation-powered Blazor component for validating standard <EditForm> 🌌 ✅
Stars: ✭ 140 (-13.58%)
Mutual labels:  validation
Schema Utils
Options Validation
Stars: ✭ 162 (+0%)
Mutual labels:  validation
Class Transformer Validator
A simple plugin for class-transformer and class-validator which combines them in a nice and programmer-friendly API.
Stars: ✭ 151 (-6.79%)
Mutual labels:  validation
Valdr
A model centric approach to AngularJS form validation
Stars: ✭ 158 (-2.47%)
Mutual labels:  validation
Dotnetcore
.NET 5 Nuget Packages.
Stars: ✭ 146 (-9.88%)
Mutual labels:  validation
Slim Validation
A validation library for the Slim Framework. It internally uses Respect/Validation.
Stars: ✭ 150 (-7.41%)
Mutual labels:  validation
Express Typescript Boilerplate
A delightful way to building a RESTful API with NodeJs & TypeScript by @w3tecch
Stars: ✭ 2,293 (+1315.43%)
Mutual labels:  validation
Aptos
☀️ A tool for validating data using JSON Schema and converting JSON Schema documents into different data-interchange formats
Stars: ✭ 144 (-11.11%)
Mutual labels:  validation
Kotlin Openapi Spring Functional Template
🍃 Kotlin Spring 5 Webflux functional application with api request validation and interactive api doc
Stars: ✭ 159 (-1.85%)
Mutual labels:  validation
Nope Validator
A small, simple and fast JS validator. Like, wow thats fast. 🚀
Stars: ✭ 142 (-12.35%)
Mutual labels:  validation
Property Validator
✅ Easy property validation for JavaScript, Node and Express.
Stars: ✭ 153 (-5.56%)
Mutual labels:  validation
Neoform
✅ React form state management and validation
Stars: ✭ 162 (+0%)
Mutual labels:  validation
Email Verifier
✅ A Go library for email verification without sending any emails.
Stars: ✭ 162 (+0%)
Mutual labels:  validation
Validation Composite
Allows uniting of several validation rules into single one for easy re-usage
Stars: ✭ 159 (-1.85%)
Mutual labels:  validation

Android Canarinho

Build Download

Esta biblioteca é um conjunto de utilitários para trabalhar com padrões brasileiros no Android. Inspirado em: https://github.com/caelum/caelum-stella.

O foco aqui é o Android. Portanto, não é compatível com aplicações Java puras.

Entre os padrões implementados temos:

  • Formatador e validador de CPF
  • Formatador e validador de CNPJ
  • Formatador e validador de boleto bancário (e linha digitável)
  • Formatador e validador de CEP
  • Formatador de telefone
  • Formatador de valores financeiros (vírgula para milhares e ponto para decimais com duas casas)

Estes são utilizados para implementar TextWatchers que formatam e validam a digitação do usuário.

Exemplo de uso:

Validar um CPF

if (Validador.CPF.ehValido(cpf))
    Toast.makeText(context, "Válido!", Toast.LENGTH_SHORT).show();
else
    Toast.makeText(context, "Inválido!", Toast.LENGTH_SHORT).show();

Formatar um CPF

String cpfFormatado = Formatador.CPF.formata(usuario.getCpf());

Formatar um EditText para CPF sem validação

cpfEditText.addTextChangedListener(new MascaraNumericaTextWatcher("###.###.###-##"));

Formatar um EditText para CPF com validação

cpfEditText.addTextChangedListener(new MascaraNumericaTextWatcher.Builder()
                                        .paraMascara("###.###.###-##")
                                        .comCallbackDeValidacao(new SampleEventoDeValidacao(context))
                                        .comValidador(Validador.CPF)
                                        .build());

Formatador de valor financeiro no padrão Real

Para deixar um usuário digitar valores monetários no padrão Real, basta adicionar um ValorMonetarioWatcher e alguns atributos ao EditText

// Padrão sem símbolo de Real
editText.addTextChangedListener(new ValorMonetarioWatcher());
editText.append("1234567890");
assertThat(editText.getText().toString(), is("12.345.678,90"));

// Customizado com símbolo e mantendo zeros ao apagar em lote
editText.addTextChangedListener(new ValorMonetarioWatcher.Builder()
        .comSimboloReal()
        .comMantemZerosAoLimpar()
        .build());
editText.append("1234567890");
assertThat(editText.getText().toString(), is("R$ 12.345.678,90"));

editText.getText().clear();
assertThat(editText.getText().toString(), is("R$ 0,00"));

Exemplo de declaração no layout:

<!--
     O inputType abre o teclado númerico e permite caracteres de 
    formatação. O text inicia com o valor zerado, porém não é 
    obrigatório.
-->
<android.support.design.widget.TextInputEditText
    android:id="@+id/amount"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/hint_value"
    android:inputType="number"
    android:maxLength="13"
    android:text="0,00" />

Callback de validação

Os TextWatchers possuem a possibilidade de avisar o usuário conforme ele está digitando sobre algum erro de campo. Para isso, usamos um EventoDeValidacao que possui os seguintes callbacks:

  • void invalido(String valorAtual, String mensagem): chamado quando o valor está inválido
  • void parcialmenteValido(String valorAtual): chamado quando o valor ainda não está completo e também não está inválido
  • void totalmenteValido(String valorAtual): chamado quando o valor está completo e válido

Um exemplo de implementação:

public class SampleEventoDeValidacao implements EventoDeValidacao {

    private final TextInputLayout textInputLayout;

    public SampleEventoDeValidacao(TextInputLayout textInputLayout) {
        this.textInputLayout = textInputLayout;
    }

    @Override
    public void invalido(String valorAtual, String mensagem) {
        textInputLayout.setError(mensagem);
    }

    @Override
    public void parcialmenteValido(String valorAtual) {
        textInputLayout.setErrorEnabled(false);
        textInputLayout.setError(null);
    }

    @Override
    public void totalmenteValido(String valorAtual) {
        new AlertDialog.Builder(textInputLayout.getContext())
                .setTitle("Campo válido!")
                .setMessage(valorAtual)
                .show();
    }
}

Veja exemplos de implementação no sample.

Changelog

Ver CHANGELOG.md

Arquitetura

  • Formatador: Formata, desformata e verifica se um valor está formatado e se pode ser formatado. Opera com valores completos.
  • Validador: Valida de duas formas: absoluta (true ou false) e atualizando um objeto de validação (ResultadoParcial).
  • Watchers: implementações de TextWatchers para formatação e validação contínua (conforme a digitação do usuário).

Para exemplos, verifique os testes na pasta sample.

Gradle

compile 'br.com.concrete:canarinho:{latest version}'

ATENÇÃO

Este projeto é desenvolvido de boa vontade e com o intuito de ajudar. No entanto, todo o desenvolvimento é feito SEM GARANTIAS.

LICENÇA

Este projeto é disponibilizado sob a licença Apache vesão 2.0. Ver declaração no arquivo LICENSE.txt

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].