Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Em outro tópico eu achei uma função em javascript que faz isso e deu certo para oque eu queria
<script language="javascript">
function sem_acento(e,args)
{
if (document.all){var evt=event.keyCode;} // caso seja IE
else{var evt = e.charCode;} // do contrário deve ser Mozilla
var valid_chars = '0123456789abcdefghijlmnopqrstuvxzwykABCDEFGHIJLMNOPQRSTUVXZWYK-_ '+args; // criando a lista de teclas permitidas
var chr= String.fromCharCode(evt); // pegando a tecla digitada
if (valid_chars.indexOf(chr)>-1){return true;}
return false; // do contrário nega
}
</script>
Mas o problema é que ele apenas bloqueia e não exibe nenhuma mensagem de alerta ou "erro" como: Não é permitido caracteres especiais '!@#$@%.
Meu input está assim:
<p:inputText id="cidade" value="#{cidadeControler.cidades.cidade}" validatorMessage="" required="true" onkeypress="return sem_acento(event);" requiredMessage="O nome da cidade é obrigatório"/>>
3 minutos atrás, gabrieldarezzo disse:
@gabrieldarezzo Acho que ocorreu algum erro.
Creio que é isto que está dizendo:
function sem_acento(e,args)
{
var evt = (document.all)? event.keyCode : e.charCode;
var valid_chars = '0123456789abcdefghijlmnopqrstuvxzwykABCDEFGHIJLMNOPQRSTUVXZWYK-_ '+args; // criando a lista de teclas permitidas
var chr= String.fromCharCode(evt); // pegando a tecla digitada
if (valid_chars.indexOf(chr)<0){
e.preventDefault();
alert('caracter inválido');
}
}
Live Demo:
[http://codepen.io/Eziquiel/pen/JWzPPR?editors=1010](http://codepen.io/Eziquiel/pen/JWzPPR?editors=1010)>
18 minutos atrás, Eziquiel disse:
Creio que é isto que está dizendo:
function sem_acento(e,args)
{
var evt = (document.all)? event.keyCode : e.charCode;
var valid_chars = '0123456789abcdefghijlmnopqrstuvxzwykABCDEFGHIJLMNOPQRSTUVXZWYK-_ '+args; // criando a lista de teclas permitidas
var chr= String.fromCharCode(evt); // pegando a tecla digitada
if (valid_chars.indexOf(chr)<0){
e.preventDefault();
alert('caracter inválido');
}
}
Live Demo:
[http://codepen.io/Eziquiel/pen/JWzPPR?editors=1010](http://codepen.io/Eziquiel/pen/JWzPPR?editors=1010)
Obrigado, @Eziquiel
Eu já havia pensado no alert, o problema é que fica algo muito agressivo.
Gostaria de algo mais como a exibição do pattern, apenas uma caixa de texto.Dê uma olhada no que desenvolvi para você.
http://codepen.io/Eziquiel/pen/MpxvwX?editors=1000
Criei esse biblioteca parecida com o pattern. Ficou bem legal e operacional.
Insira estas bibliotecas na sua <head> (ignore a primeira caso já tenha incluído a JQuery).
<script src="jquery.min.js"></script>
<script src="mypattern.js"></script>
<link rel="stylesheet" href="mypattern.css"/>
Feito isso, no seu **input type="text" **inclua estes dois atributos, conforme exemplificado abaixo (bem intuitivo):
<input only-these-char="0123456789abcdefghijlmnopqrstuvxzwykABCDEFGHIJLMNOPQRSTUVXZWYK-_ " text-for-valid="Apenas letras sem acento ou cedilha e numeros. Evite caracteres especiais." type="text" />
<input only-these-char="0123456789" text-for-valid="Apenas números" type="text" />
(não precisa criar o evento onkeypress no seu input).
No "**only-these-char**" informe todos os caracteres válidos.
No "**text-for-valid**" informe o texto que informa ao usuário quais os tipos de caracteres válidos.
Segue as bibliotecas:
@Eziquiel
Como eu suspeitava.
Deu incompatibilidade com o inputText.

Eu fiz algumas alterações para não precisar colocar eles no inputText e sim direto no .js e no codepen funcionou perfeitamente, mas no meu projeto ficou como se o script .js nem existisse.
As bibliotecas que te passei estão linkadas certinho?
Se não está achando, então é problema no link que importa a biblioteca.
Está usando valores dentro destes novos atributos?
Tem que usar conforme no exemplo que te passei.
A biblioteca só funciona em <input> onde o type seja "text" e tenha aqueles dois atributos que mencionei anteriormente.
Essa é a condição para o funcionamento da biblioteca.Sim, elas estão linkadas, o problema é que eu utilizo a biblioteca primefaces que implementa o inputText e não posso alterar isso e ela não dá suporte aos atributos que você utilizou.
Vamos ver se resolve:
Use esta biblioteca em anexo: (substituindo a que você tem).
Agora você terá que incluir 3 atributos na tag do seu <inputText>.
São elas:
check-char="true" // sempre true.
only-these-char="0123456789" // seus caracteres válidos
text-for-valid="Apenas números" // mensagem de caracteres válidos
O problema é que o inputText não reconhece os
only-these-char e text-for-valid
Eu recebo o erro como na ultima imagem postada: o atributo only-these-char não está definido ao componente inputText, sendo assim não posso utiliza-lo
Certo. Vamos fazer via evento "onkeypress".
Primeiro: Use esta biblioteca em anexo: (substituindo a que você tem).
**Segundo**: Retire link que importa a biblioteca mypattern.js da sua <head> e coloque-o no final do seu documento, acima do fechamento do body (</body>)
**Terceiro**: Todos os parâmetros necessários devem ser passados pelo "onkeypress". Exemplo:
<input onkeypress="return checkValidChar(this,'0123456789','Apenas números',event);" type="text" />
**Parâmetros**:
-
Use sempre o this no primeiro parâmetro;
-
Seus caracteres válidos;
-
mensagem de caracteres válidos;
-
Use sempre event no último parâmetro.
Segue a biblioteca:
Funcionou!!!
Porém o aviso não está aparecedo no input.
Como segue na imagem:

Certo. Use esta biblioteca então. Substitua a sua por essa.
Coloque esta linha na sua <head> pra eliminar o problema da palavra "inválida" sair incorreta.
<meta charset="UTF-8" />
Agora funcionou certinho, muito obrigado pela ajuda.
Só tenho mais uma duvida, eu quero colocar as coisas que você me passou em uma pasta separada chamada js
Mas quando eu chamo ela, não reconhece.
Eu já tentei colocar:
js/mypattern.js
C:/Users/440528/Documents/NetBeansProjects/Logistica/web/js/mypattern.js
C:\Users\440528\Documents\NetBeansProjects\Logistica\web\js\mypattern.js
Mas ele só reconhece se estiver na mesma pasta, no caso "administração"
Conteudo migrado sem texto.