Mascara números e caracteres especiais

17 respostas
Michel_M

Opa!
Pessoa gostaria de pedir-se alguem tem uma função em javascript
para obrigar, o usuario ha so poder digitar numeros e caracteres especiais.

desde ja
agradeço

17 Respostas

leoviniga

Mas você quer que:

1.Se quando o usuário clicar em um botão(por exemplo)…receba um aviso que existem caractéres inválidos no seu textfield
2.Literalmente não deixar ele escrever
3.dar o aviso do exemplo 1 logo quando ele digitar tal caracter?

jimmyhc

Poste um trecho do fonte que tu tens dae ajudamos com as duvidas!!

Michel_M

leoviniga

eu não quero deixar o usuário digitar letras somente numeros
e caracteres especiais. Literalmente

leoviniga

Então você pode fazer um Array com os caractéres que serão considerados válidos (ou os inválidos,o que ficar mais fácil…) e implementar KeyListener na sua classe…
daí você adiciona o KeyListener no seu textfield e faz uma rotina pra verificar se o caractér que a pessoa digitou é válido ou não no método KeyPressed() do KeyListener…

não sei se tem um jeito mais fácil mas enfim…eu até postaria com exemplo mas tô meio com pressa :frowning: quem sabe amanhã eu veja se você ainda não tiver conseguido

té mais

Michel_M

leoviniga

blz!..muito obrigado vou ficar no seu aguardo.

pedroroxd

Não estou com compilador aqui, mas seria algo do tipo:

final String _caracteresNaoAceitar = "abcdefghijklmnopqrstuvwxyz"; _jTextDigite.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { char m = e.getKeyChar(); if (_caracteresNaoAceitar.contains(String.valueOf(m))) { _jTextDigite.setText(_jTextDigite.getText().replaceAll(String.valueOf(m), "")); } } });
Assim, quando a pessoa digitar um dos caracteres daquela lista, será substituido por nada…
Só aceitará números e caracteres especiais.

gRoOve

Levando em consideração o desempenho, não seria interessante fazer esse tipo do validação do lado do cliente? Como foi solicitado, em javascript?

pedroroxd

Esse Script é para máscara de números de telefones...
To achando que é isso que você quer fazer.. Permitir só caracteres especiais e números..

Se não for máscara que você quer, basta dar uma ajeitada no Script..
No caso ele coloca parentese nos 2 primeiros números e um - entre o quarto e o quinto dígito..
Além de claro, não permitir letras..

Comentei para você ver, qualquer coisa só remover a linha.

Em html faz assim:
<html>

<script>

function mascara(o,f){
    v_obj=o
    v_fun=f
    setTimeout("execmascara()",1)
}

function execmascara(){
    v_obj.value=v_fun(v_obj.value)
}

function telefone(v){
    v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
    v=v.replace(/^(\d\d)(\d)/g,"($1) $2") //Coloca parênteses em volta dos dois primeiros dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")    //Coloca hífen entre o quarto e o quinto dígitos
    return v
}

</script>
<body>
Número do seu Celular: <input type="text" name="numero" onkeypress="mascara(this,telefone)" maxlength="14" /><br />
<input type="submit" value="Enviar código" />
</body>
</html>
Agora se for em Java, faz assim:
final String _caracteresNaoAceitar = "abcdefghijklmnopqrstuvwxyz";
		_jTextFieldSeu.addKeyListener(new KeyAdapter() {
			public void keyReleased(KeyEvent e) {
				char digitado = e.getKeyChar();
				if (_caracteresNaoAceitar.contains(String.valueOf(digitado))) {
					_jTextFieldSeu.setText(_jTextFieldSeu.getText().replaceAll(String.valueOf(digitado), ""));
				}
			}
		});
Agora testei com compilador e deu certo..
Michel_M

pedroroxd

Valeu muito obrigado mais não o que eu quero ainda
eu quero uma mascara que não deixe o usuario preencher
letras. Mais ele pode colocar numeros e caracteres especiais.

o que vc me passou é uma mascara de telefone.

mais desde ja eu le agradeço eu so estou pedindo pq eu so
sei o basico em java scritp!

gRoOve

eu sei que não é o certo!..e sei tb que tem muitas ferramentas hj que
desativam o java script o certo e fazer na linguagem que aconteça no servidor…
mais foi exigido para min fazer isso.

gRoOve

Não entendi o que você quer, no teu primeiro post você pede uma função em javascript, agora está falando que tem que fazer em java "/

Michel_M

não eu quis dizer que foi pedido para mim fazer em javascript.
Mascara que eu quero é em javascript não tem nada a ver
com o java.

gRoOve

Então tenta pedir ajudar neste fórum, acho que o pessoal lá pode te auxiliar melhor :slight_smile:

Michel_M

Valeu muito obrigado e desculpa qualquer coisa.

abraço

M

Estou tentando criar uma mascara de data com javascript pra minha jsp que saisse assim "11/11/2001" mas do jeito que eu criei ela sai assim "11/11/20/1"

function Mask(o,f){
			v_obj=o;
			v_fun=f;
			setTimeout("exemask()", 1)
		}
		
		function exemask(){
			v_obj.value=v_fun(v_obj.value)
		}
		
		
		function Data(v){
			v=v.replace(/\D/,"")
			v=v.replace(/(\d{2})(\d)/,"$1/$2")
			v=v.replace(/(\d{2})(\d)/,"$1/$2")
			v=v.replace(/(\d{5})(\d)/,"$4/$9")
			
			return v
		}

Grato desde já.

M

Consegui resolver, aqui está o código:

function Data(v){
			v=v.replace(/\D/,"")
			v=v.replace(/(\d{4})(\d)/,"$1/$2")
			v=v.replace(/(\d{2})(\d)/,"$1/$2")
			v=v.replace(/(\d{4})(\d)/,"$1/$2")

       return v
                       }

Acredito que alguém vai ter essa mesma dúvida e num vai achar em lugar algum.

Mstanguine
mk009:
Estou tentando criar uma mascara de data com javascript pra minha jsp que saisse assim "11/11/2001" mas do jeito que eu criei ela sai assim "11/11/20/1"
function Mask(o,f){
			v_obj=o;
			v_fun=f;
			setTimeout("exemask()", 1)
		}
		
		function exemask(){
			v_obj.value=v_fun(v_obj.value)
		}
		
		
		function Data(v){
			v=v.replace(/\D/,"")
			v=v.replace(/(\d{2})(\d)/,"$1/$2")
			v=v.replace(/(\d{2})(\d)/,"$1/$2")
			v=v.replace(/(\d{5})(\d)/,"$4/$9")
			
			return v
		}

Grato desde já.

Trabalhar com máscaras desse jeito é complicado. Procure ver mascaras com jQuery, bem mais fácil de interpretar e fica bem mais elegante =)
Mas bem, para seu código altere desse modo:

function data(v){   
            v=v.replace(/\D/g,"")   //Aqui para ser excluido o que não é digito
            v=v.replace(/(\d{2})(\d)/,"$1/$2")   
            v=v.replace(/(\d{2})(\d)/,"$1/$2")   
            v=v.replace(/^(\d{4})(\d)/,"$1/$2")   // aqui o modo para que seja incluido uma barra '/' depois de 4 digitos.
            return v   
        }

Lembre-se que para seja apresentado no layout: 09/11/2011, é preciso que o maxlength do campo seja de 10: maxlength="10".

M

Testei, funciona também. Mstanguine, tu tem alguma sugestão de livro que explique bem o uso de expressões regulares em javascript?

Criado 11 de fevereiro de 2011
Ultima resposta 9 de nov. de 2011
Respostas 17
Participantes 7