Bom dia pessoal,
Estou tentando fazer uma validação de restrição de caracteres na senha, ou seja, quero criar uma função que valide se a senha possua letras minusculas, maiusculas, números e caracteres especiais, porém gostaria que independente da ordem o regexp_like validasse.
O máximo que consegui fazer foi uma regra assim:
SELECT *
FROM DUAL
WHERE REGEXP_LIKE('*1aA',
'([a-z][A-Z][0-9][*@#$%]|[A-Z][a-z][0-9][*@#$%]|[0-9][A-Z][a-z][*@#$%]|[0-9][a-z][A-Z][*@#$%]|'||
'[*@#$%][a-z][A-Z][0-9]|[*@#$%][A-Z][a-z][0-9]|[*@#$%][0-9][A-Z][a-z]|[*@#$%][0-9][a-z][A-Z]|'||
'[a-z][*@#$%][A-Z][0-9]|[A-Z][*@#$%][a-z][0-9]|[0-9][*@#$%][A-Z][a-z]|[0-9][*@#$%][a-z][A-Z]|'||
'[a-z][A-Z][*@#$%][0-9]|[A-Z][a-z][*@#$%][0-9]|[0-9][A-Z][*@#$%][a-z]|[0-9][a-z][*@#$%][A-Z])')
Que faz o que eu quero mas achei muito complexa, teria uma forma mais fácil de eu validar a senha assim:
Senha: 'a1A%' - Senha correta.
Senha: 'A1a%' - Senha correta.
Senha: '%Aa1' - Senha correta.
Senha: 'A%1a' - Senha correta.
Senha: 'A1a' - Senha incorreta pois não tem caracter especial.
E assim por diante, então a idéia é que possua ao menos uma ocorrencia de cada validação.
Como Validar Senha Regexp_Like?
-
- Rank: Programador Sênior
- Mensagens: 60
- Registrado em: Ter, 17 Jan 2006 1:45 pm
- Localização: Santa Catarina
Att.:
Alan Juliano Metzger
Programador Oracle
Inside System Informática
Msn/E-mail: alanjuliano@yahoo.com.br
Alan Juliano Metzger
Programador Oracle
Inside System Informática
Msn/E-mail: alanjuliano@yahoo.com.br
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Olá,
Não creio que tenha como especificar numa única expressão regular as várias alternativas... Teria que testar em diversas ordens e testar também que não aparecem caracteres inválidos, fora daqueles permitidos por sua regra.
Na minha opinião fica bem mais legível separar em mais de uma função, com AND:
Tem tamanho mínimo? Se for o caso, teria que testar o length(senha) between X and Y também.
Não creio que tenha como especificar numa única expressão regular as várias alternativas... Teria que testar em diversas ordens e testar também que não aparecem caracteres inválidos, fora daqueles permitidos por sua regra.
Na minha opinião fica bem mais legível separar em mais de uma função, com AND:
SQL> with t as (
2 select 'a1A%' senha from dual union all
3 select 'A1a%' senha from dual union all
4 select '%Aa1' senha from dual union all
5 select 'A%1a' senha from dual union all
6 select 'A% 1a' senha from dual union all
7 select 'A% 1a' || chr(13) || chr(10) senha from dual union all
8 select 'A%á1a' senha from dual union all
9 select 'A1a' senha from dual
10 ) -- fim dos dados de teste
11 select senha,
12 case when regexp_like(senha, '[*@#$%]')
13 and regexp_like(senha, '[A-Z]')
14 and regexp_like(senha, '[a-z]')
15 and regexp_like(senha, '[0-9]')
16 and regexp_instr(senha, '[^*@#$%A-Za-z0-9]') = 0
17 then 'VÁLIDO' else 'INVÁLIDO' end testa_senha
18 from t;
SENHA TESTA_SENHA
------- -----------
a1A% VÁLIDO
A1a% VÁLIDO
%Aa1 VÁLIDO
A%1a VÁLIDO
A% 1a INVÁLIDO
A% 1a INVÁLIDO
A%á1a VÁLIDO
A1a INVÁLIDO
8 rows selected
-
- Rank: Programador Sênior
- Mensagens: 60
- Registrado em: Ter, 17 Jan 2006 1:45 pm
- Localização: Santa Catarina
Att.:
Alan Juliano Metzger
Programador Oracle
Inside System Informática
Msn/E-mail: alanjuliano@yahoo.com.br
Alan Juliano Metzger
Programador Oracle
Inside System Informática
Msn/E-mail: alanjuliano@yahoo.com.br
Bom não consegui em uma só mas acho que simplifiquei as duas.
SELECT *
FROM dual
WHERE regexp_like('&senha', '^.*[[:upper:]].*$')
AND regexp_like('&senha', '^.*[[:lower:]].*$')
AND regexp_like('&senha', '^.*[0-9].*$')
AND regexp_like('&senha', '^.*[^A-Z,0-9].*$')
Obrigado pela ajuda fsitja.
SELECT *
FROM dual
WHERE regexp_like('&senha', '^.*[[:upper:]].*$')
AND regexp_like('&senha', '^.*[[:lower:]].*$')
AND regexp_like('&senha', '^.*[0-9].*$')
AND regexp_like('&senha', '^.*[^A-Z,0-9].*$')
Obrigado pela ajuda fsitja.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes