Code Monkey home page Code Monkey logo

validator-docs's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

validator-docs's Issues

Aceitar valor NULL quando a validação não possuir "required"

Estou utilizando a validação "cpf_cnpj", porém o meu campo é de preenchimento opcional. Então se tento salvar sem preencher o CPF ou CNPJ a validação é feita mesmo assim.

Tem como obrigar a validação somente quando for "required|cpf_cnpj" e quando estiver apenas "cpf_cnpj" não validar se o campo não estiver preenchido?

Sanitização causa validação errônea quando a input possue letras

Veja um caso de duas inputs que são aplicadas a regra de validação para CNH:

$cnh_valido = '43872153406';
$cnh_invalido = 'ZZZ43872153406'

Ambos passam na validação, pois a chamada do método sanitize:

public function sanitize($value): string
    {
        return empty($value) ? "" : preg_replace('/[^\d]/', '', $value);
    }

$value = $this->sanitize($value);

O sanitize altera o valor antes da valiação, porém, como ele não altera o próprio request (e nem faz sentido), a aplicação identifica como válido um valor que na verdade é inválido.
Testei com CNH, mas com certeza deve ocorrer em todas as Rules que também utilizam o sanitize.

A correção é simples, a validação deve ser feita em cima da input bruta e não deve haver nenhuma transformação antes da validação.

Como usar a validação do cpf e cnpj com required_if

Preciso validar dependendo do que for enviado pelo usuário
meu código esta assim

'cli_cpf' => 'required_if:cli_tipo,==,PF|cpf',
'cli_cnpj' => 'required_if:cli_tipo,==,PJ|cnpj',

porém ele valida os dois e não obedece o required_if

Validação unique

Como utilizo a validação de cpf unique key?
Tentei assim e não funcionou.
'cpf' => 'required|unique:users,cpf|cpf',

Validação RG

Olhei a documentação e não consegui identificar se já possui uma validação de RG ou isso ainda não foi implementado ?

Validação de CNH errada

O validador implementado não cobre todos os casos corretamente.
Exemplo real que chegou pra mim hoje: 04463004100.

O validador do 4devs usado como referência do projeto indica falso.
O validador em:
https://www.treinaweb.com.br/ferramentas-para-desenvolvedores/validar/cnh
Aponta corretamento como verdadeiro.

Vou pegar o algoritmo correto com o detran. E depois faço um pull request.

Mas já fica o alerta, e é a 2ª vez que encontro erro nas implementação desse 4devs. Não são muito confiáveis não.

E acredito que deva ter mais exemplos nos casos de teste, com apenas 1 caso é muito fácil passar um algoritmo problemático.

PHP 8

Tem alguma limitação para atualizar o composer.json para também suportar php 8?

Package autodiscovery

Olá, estou usando este package em meus projetos e gostaria de saber se o mesmo ainda está sendo mantido.

Em caso afirmativo, gostaria de saber se posso enviar uma PR para adição do package autodiscovery.

Desde já, agradeço!

PHP puro

Show essa lib!
É possível usar em PHP puro?
Existe algum equivalente para PHP puro?

Possibilidade de CPF/CNPJ com zeros

Olá, seria possível implementar uma opção onde o CPF/CNPJ (são obrigatórios no BD), pudessem ser passados com 000.000.000-00 por exemplo? Sei que não é o correto, principalmente pq no BD é obrigatório, mas no dia a dia as vezes se faz necessário.

No restante, top demais, parabens.

Não está funcionando no Laravel 5.7

Bom dia,

O validador não está funcionando no Laravel 5.7, ocorre o seguinte erro: Method Illuminate\Validation\Validator::validateCpf does not exist.

Qdo o campo não é requerido e vem em branco gera erro

Olá, na minha aplicação exijo o cpf/cnpj, apenas se um outro determinado campo tiver um valor específico, e nesse caso uso
dessa forma:

'cpf_cnpj' => 'required_if:tipo_cobranca,1,2|cpf_cnpj'

O problema é que ele está validando com o campo em branco.

No caso eu acredito que a validação tenha de ocorrer apenas se tiver informação

Para verificar a formação também dá problemas, mas no caso de adicionar formato_cpf_cnpj, gera exceção na aplicação

Documentação incompleta/insuficiente.

Estou tentando fazer a validação mas a mesma me retorna os inputs.
A documentação não deixa claro o que devo fazer caso a validação não passe.

`$rules = [
'name' => 'required',
'cpf' => 'required|cpf', // ADICIONAR UNIQUE
'email' => 'unique:users|required',
'password' => 'required|confirmed|min:6',
];

$this->validate($request, $rules);
// O QUE EU FAÇO COM ISSO? Armazeno numa variável?
// Como retornar o erro em JSON?`

Problemas na validação da biblioteca de RENAVAM

Olá pessoal, estou usando a biblioteca de vocês para realizar as validações de RENAVAM. Estou utilizando o gerador do 4Devs para realizar os testes, mas o retorno que tenho da biblioteca é que o número do RENAVAM é inválido. Tentei colocar meu RENAVAM pessoal, e mesmo assim dá inválido. Coloquei um outro RENAVAM real de outro carro e passou. Poderiam verificar se há alguma inconsistência? Pois vocês mesmos indicam o 4Devs para testes e nenhum dos números gerados passam como válidos. No aguardo. Se precisarem de apoio, me avisem que estou disponível para tirar dúvidas. Obrigado.

[DISCUSSÃO] Sugestão de melhoria

Sugiro a refatoração do aquivo ValidatorProvider para ond ele extenda as validações já existentes no laravel sem substituir a resolução da validação (código citado), fazendo isso tambem seria nescessario refetorar as rules, abaixo segue exemplo.

$this->app['validator']
->resolver(
function ($translator, $data, $rules, $messages, $attributes) use ($me, $validatorFormats) {
$messages += $me->getMessages();
return new Validator($translator, $validatorFormats, $data, $rules, $messages, $attributes);
}
);

Exemplo de provider

use App\Rules\Base64ImageRule;
use App\Rules\CheckBilletDueDateRule;
use App\Rules\CheckBilletPaymentRule;
use App\Rules\CheckCreditCardInstallmentsRule;
use App\Rules\CheckInstallmentsRule;
use App\Rules\EnumRule;
use Illuminate\Support\ServiceProvider;
use Validator;

class ValidationServiceProvider extends ServiceProvider
{
    protected array $rules = [
        'enum' => EnumRule::class,
        'base64_image' => Base64ImageRule::class,
        'check_installments' => CheckInstallmentsRule::class,
        'billet_value_paid' => CheckBilletPaymentRule::class,
        'billet_due_date' => CheckBilletDueDateRule::class,
        'check_installments_count' => CheckCreditCardInstallmentsRule::class,
    ];

    /**
     * @return void
     */
    public function boot(): void
    {
        $this->registerValidationRules();
    }

    /**
     * @return void
     */
    private function registerValidationRules(): void
    {
        foreach ($this->rules as $alias => $class) {
            if (is_string($alias)) {
                Validator::extend($alias, "$class@passes");
            }
        }
    }
}

Este exemplo tirei de um projeto que fiz

Prós

  • Maior compatibilidade com as versoes do Laravel (pelo menos do meu ponto de vista)
  • Suporte a customização dos attibutes
  • Suporte a customização das mensagens por arquivos de tradução
  • Resolução da issue #133

Contras

  • Trabalho para refatorar (posso ajudar)
  • Possivel perda de retrocompatibilidade (brakingchange)
  • Possiveis erros/problemas que eu ainda não encontrei

Substituição de mensagens de erro

A lib está retornando que o CPF 29075 é invalido, quando o CPF na verdade está duplicado no banco de dados

'cpf' => ['required', 'cpf', Rule::unique('users')->whereNull('deleted_at')],

php: ^8.1 -> 8.1.12
laravel/framework: ^9.19 -> 9.31.0
geekcom/validator-docs: ^3.7 -> 3.7.1

   $validationRules = [
            'name' => 'required',
            'cpf' => ['required', 'cpf', Rule::unique('users')->whereNull('deleted_at')],
            'cell_phone' => 'required|regex:/\([0-9]{2}\) 9[0-9]{2}\.[0-9]{3}\.[0-9]{3}/',
            'birth_date' => 'required|date_format:d/m/Y',
            'email' => [
                'required',
                'email:rfc,dns,spoof,filter',
                function ($attribute, $value, $fail) {
                    $exists = User::where('email', Str::lower($value))
                        ->whereNull('deleted_at')
                        ->exists();
                    if ($exists) {
                        $fail("O {$attribute} informado, já está em uso!");
                    }
                },
            ],
            'password' => $this->storePasswordRules(),
        ];
        $validator = Validator::make(
            $request->all(),
            $validationRules,
            ['cell_phone.regex' => 'O campo celular não é valido!']
        );
        $validator->setAttributeNames(
            [
                'cpf' => 'Cadastro de Pessoa Física',
                'name' => 'nome',
                'email' => 'e-mail',
                'password' => 'senha',
                'cell_phone' => 'celular',
                'birth_date' => 'data de nascimento',
            ]
        );

        if ($validator->fails()) {
            return $this->response(
                $validator->errors()->toArray(),
                'Erro',
                HttpStatusCodeEnum::UnprocessableContent
            );
        }

$this->app['validator']
->resolver(
function ($translator, $data, $rules, $messages, $attributes) use ($me, $validatorFormats) {
$messages += $me->getMessages();
return new Validator($translator, $validatorFormats, $data, $rules, $messages, $attributes);
}
);

Erro aconte pois ao chamar o método make do validator ele chama o metodo resolve (referencia acima) as mesagens são substituidadas o por que que as mensagens são substituidas eu não entendi, já que se comentar o código citado resolve o problema.

PS. Vou abrir outra issue para sugerir algumas mudanças

Obrigatoriedade

Amigo, ao meu ver, a validação dos campos não deveria obrigar eles a estarem preenchidos.

Por exemplo, meu formulário tem um campo CNPJ que não é obrigatório, ao usar a validação cnpj, mesmo que o campo vá vazio, ele da erro no campo dizendo que não é válido.

Para obrigar um campo ser obrigatório, o laravel já tem o required

Validação de Passaporte brasileiro

Poderíamos adicionar validação de passaporte na lib, o que acham?

fiz uma prova de conceito, que deve precisar de alguns ajustes da comunidade, mas pelo menos ilustrei minha ideia

[Ajuda] - Testar a lib no Laravel 9.

Olá pessoal, precisamos ajuda para testar a nossa lib em uma instalação nova do Laravel 9.
Acredito que já estamos atualizados, pois aparentemente não tivemos mudanças no framework, assim não teríamos grandes problemas. Entretanto s é necessário realizar testes funcionais para garantir esse ponto.

Esperamos que apareçam pessoas voluntárias afim de ajudar-nos nesta tarefa, muito obrigado pela contribuição de todos, o open source vive graças a vocês. S2

Nomes dos atributos

Olá,

Os nomes dos atributos não estão sendo passados.

No arquivo ValidatorProvider.php está assim

public function boot()
    {

        $me = $this;

        $this->app['validator']->resolver(function ($translator, $data, $rules, $messages) use ($me) {
            $messages += $me->getMessages();
            return new Validator($translator, $data, $rules, $messages);
        });
    }

Mas deveria estar assim

public function boot()
    {

        $me = $this;

        $this->app['validator']->resolver(function ($translator, $data, $rules, $messages, $attributes) use ($me) {
            $messages += $me->getMessages();

            return new Validator($translator, $data, $rules, $messages, $attributes);
        });
    }

Definir a versão mínima do PHP [Sugestão]

O requisito da lib é illuminate/support: 5.*. Sendo o mais baixo 5.0 que requer PHP 5.4.0 [1]. Já o requisito dev é PHPUnit 7.5 que requer PHP 7.1. Sugiro que escolha uma versão para requisito do PHP e coloque no package.json para ajudar o usuário entender o ambiente necessário.

Outra coisa que pode ajudar também é o CI executar os testes em várias versões do PHP.

[1] https://github.com/laravel/framework/blob/5.0/composer.json
[2] https://github.com/sebastianbergmann/phpunit/blob/7.5/composer.json

Não consigo usar novas regras de validação do Laravel 8

Estou tentando usar a regra prohibited_if (https://laravel.com/docs/8.x/validation#rule-prohibited-if) e também usar as validações de cpf e cnpj do validator-docs.
Porem recebo um erro vindo do validator-docs dizendo que não existe a regra prohibited_if.
O laravel não implementou a regra ou o validator-docs é que não conhece as novas regras da versão 8.x ?
Tem como corrigir isto para continuar usando o validator-docs e também tirar proveito das regras novas ?

Laravel 5.6

Bom dia!

Parabéns pela iniciativa! Ao utilizar o validador para o cpf, mesmo que eu insira um cpf inválido ele permite prosseguir.

Embora eu tenha colocado a validação do cpf no array de validação
'cpf' => 'required|cpf'

Rodei o composer install tbm e acrescentei geekcom\ValidatorDocs\ValidatorProvider::class, no app.php

Mesmo assim o cpf inválido não é barrado.. Será que estou esquecendo alguma etapa ou não é compativel com laravel 5.6?

Melhorar validação de certidão de nascimento

De acordo com este site, este é o algoritmo para se calcular o dígito verificador de uma certidão de nascimento:

(exemplo: 104539015520131000120210000123)

[...]

O Número de Matrícula tem a configuração aaaaaa.bb.cc.dddd.e.fffff.ggg.hhhhhhh-ii, onde:

[...]

ii indica o Dígito Verificador DV, cujo cálculo obedece ao seguinte esquema, dentro do critério de DV MÓDULO 11 já conhecido:

1  0  4  5  3  9  0  1  5  5  2  0  1  3  1  0  0  0  1  2  0  2  1  0  0  0  0  1  2  3 = 2               
x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x 
2  3  4  5  6  7  8  9 10  0  1  2  3  4  5  6  7  8  9 10  0  1  2  3  4  5  6  7  8  9
----------------------------------------------------------------------------------------                   
2+ 0+16+25+18+63+ 0+ 9+50+ 0+ 2+ 0+ 3+12+ 5+ 0+ 0+ 0+ 9+20+ 0+ 2+ 2+ 0+ 0+ 0+ 0+ 7+16+27 = 288

288÷11=26, com resto 2 (este é o 1º dígito do DV) - Nota: se o resto for "10", o DV será "1"

1  0  4  5  3  9  0  1  5  5  2  0  1  3  1  0  0  0  1  2  0  2  1  0  0  0  0  1  2  3  2 = 1
x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x  x
1  2  3  4  5  6  7  8  9 10  0  1  2  3  4  5  6  7  8  9 10  0  1  2  3  4  5  6  7  8  9
-------------------------------------------------------------------------------------------
1+ 0+12+20+15+54+ 0+ 8+45+50+ 0+ 0+ 2+ 9+ 4+ 0+ 0+ 0+ 8+18+ 0+ 0+ 1+ 0+ 0+ 0+ 0+ 6+14+24+18 = 309

309÷11=28, com resto 1 (este é o 2º dígito do DV) - Nota: se o resto for "10", o DV será "1"

Portanto, o Número de Matrícula+DV = 104539.01.55.2013.1.00012.021.0000123-21.

Em pseudocódigo, ficaria mais ou menos assim:

soma0 = 0
soma1 = 0

i = 0
para cada digito nos 30 primeiros digitos da certidao
    soma0 += digito * (i + 2)
    soma1 += digito * (i + 1)
    i += 1

d0 = soma0 % 11
se d0 == 10 
    d0 = 1

d1 = (soma1 + 9*d0) % 11
se d1 == 10 
    d1 = 1

dv = d0*10 + d1

Para tornar a validação mais precisa, bastaria comparar o Dígito Verificador calculado com os últimos dois dígitos da certidão:

dvEsperado = d0*10 + d1
dvAtual = ultimos 2 digitos da certidao como inteiro
valido = dvAtual == dvEsperado

Não encontrei nenhuma descrição desse método em documentos oficiais. No entanto, por prestar serviços a um órgão público, tenho acesso a uma base considerável de certidões de nascimento e o algoritmo conseguiu validar todos. No entanto, se alguém quiser contribuir com a discussão, pode ficar à vontade!

Isso iria melhorar bastante a validação atual, que pelo que entendi é feita somente por uma expressão regular.

Method geekcom\Validator Docs\Validator::validate Required, does not exist

Fala galera.

Estou utilizando Laravel 5.8 e tentando fazer o store() mas tá dando esse erro quando clico em cadastrar.

Method geekcom\Validator Docs\Validator::validate Required, does not exist

ImediataController.php

public function store(ImediataStoreRequest $request)
    {
        $dados = $request->validated();        

        $funcionario_id = Auth::id();

        $dados['funcionario_id']    = $funcionario_id;

        Imediata::create($dados);

        return redirect()->route('acao-imediata.index')->with('success', "Ação Imediata cadastrada com sucesso!");
    }
ImediataStoreRequest.php

public function rules()
    {
        return [
            'nome'              => 'required,' . $this->imediata,
            'data'              => 'required,' . $this->imediata,
            'descricao'         => 'required,' . $this->imediata,
            'equipamento_id'    => '',
            'funcionario_id'    => 'required,' . $this->imediata,
            'status'            => '',
        ];
    }

Alguma solução ?

RG - Registro Geral

Verifiquei que não existe validador para RG no projeto.
Realizando uma pequena busca na internet constatei que cada Estado tem autonomia para emitir RG com seu padrão.

Seria o caso de criar uma validação para cada Estado ou considerar a menos restritiva?

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.