Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hunternh

Máscara para entrada de dados

Recommended Posts

Procurei muito, mas muito mesmo e não encontrei nada, ai não tive escolha, fui obrigado a desenvolver uma classe para isso (obs. classe para AS3):

 

Mask.as

/**
 * Mask
 *
 * @author Wagner Brandão Soares
 *
 * @langversion 3.0
 */
package classes
{
	import flash.events.TextEvent;
	import flash.text.TextField;
	
	public class Mask
	{
		private var obj:TextField;
		private var mascara:String;
		private var charMap:Object = {	num:"[0-9]",
										char:"[A-Za-z]",
										all:"[A-Za-z0-9]"};
		
		public function Mask(_obj:TextField,_mascara:String = "")
		{
			this.obj = _obj;
			this.obj.addEventListener(TextEvent.TEXT_INPUT,this.tecla);
			this.mascara = _mascara;
		}
		
		private function setCaretPosition(pos:int):void
		{
			this.obj.setSelection(pos,pos);
		}
		
		private function tecla(ev:TextEvent):void
		{
			var key:uint = ev.text.charCodeAt(0);
			var char:String = ev.text;
			var texto:Array = new Array(this.mascara.length);
			var pos:int = this.obj.selectionBeginIndex;
			var igual:Object = null;
			var reChar:RegExp;
			
			for(var i:int = 0;i < texto.length; i++)
			{
				if(this.obj.text.length < i) texto[i] = "";
				else texto[i] = this.obj.text.charAt(i);
			}
			
			if (key >= 48 && key <= 122)
			{//typeable characters
				while(pos < this.mascara.length)
				{
					// verifica se o caracter na posicao do cursor é um elemento da máscara
					if(this.mascara.charAt(pos) != "9" && this.mascara.charAt(pos) != "a" && this.mascara.charAt(pos) != "*")
					{// se for um elemento da mascara, adiciona o mesmo no texto e passa para a próxima posição
						texto[pos]=this.mascara.charAt(pos);
						pos++;
						continue;
					}
					else
					{// se não for um caracter da mascara, verifica se o mesmo é permitido
						switch(this.mascara.charAt(pos))
						{
							case "9":
								reChar = new RegExp(charMap.num);
								break;
							case "a":
								reChar = new RegExp(charMap.char);
								break;
							case "*":
								reChar = new RegExp(charMap.all);
								break;
							default:break;
						}
						
						igual= reChar.exec(char);
						
						if(igual)
						{
							texto[pos]=char;
							pos++;
						}
						break;
					}					
				}
				// devolve o texto para o input
				this.obj.text = texto.join("");
				// seta a nova posição do cursor
				setCaretPosition(pos);
				ev.preventDefault();
			}
			else ev.preventDefault();
		}
	}
}

exemplo de uso:

 

import classes.Mask;

new Mask(input1,"(99) 9999-9999"); // no caso de estar usando um TextField

new Mask(input2.textField,"99.999.999/9999-99"); // no caso de estar usando um TextInput

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom, parabéns.

 

Agora tem um pacote de classes que tem uma classe que faz isso.

 

Tipo assim

import ascb.util.*;

var estilo:NumberFormat = new NumberFormat("#,###,###,###");
box_txt.text = estilo.format(1234);

Saida:

 

1.234 dentro do input text.

 

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara essa classe me salvou o dia, fiz algumas pequenas implementações para meu caso.

Eu precisava que a mascara mostrasse os símbolos ( ) - DD/MM/AA

e quando o usuário digitasse iria sendo substituído.

 

 

 

/**
* Mask
*
* @author Wagner Brandão Soares
* Modificações: Pablo Erick Cardoso / pabloprogramador@gmail.com
* @langversion 3.0
*/
package com
{
	import flash.events.TextEvent;
	import flash.text.TextField;
	
	public class Mascara
	{
		private var obj:TextField;
		private var mascara:String;
		private var charMap:Object = {	num:"[0-9]",
										char:"[A-Za-z]",
										all:"[A-Za-z0-9]"};
		
		public function Mascara(_obj:TextField,_mascara:String = "")
		{
			_obj.text = (_mascara.split("9")).join(" ");
			_obj.text = (_mascara.split("a")).join(" ");
			///////////////////////ESCREVE " " E SIMBOLOS NA TAG//////////////////////////////////////////////
			this.obj = _obj;
			this.obj.addEventListener(TextEvent.TEXT_INPUT,this.tecla);
			this.mascara = _mascara;
		}
		
		private function setCaretPosition(pos:int):void
		{
			this.obj.setSelection(pos,pos);
		}
		
		private function tecla(ev:TextEvent):void
		{
			var key:uint = ev.text.charCodeAt(0);
			var char:String = ev.text;
			var texto:Array = new Array(this.mascara.length);
			var pos:int = this.obj.selectionBeginIndex;
			var igual:Object = null;
			var reChar:RegExp;
			
			for(var i:int = 0;i < texto.length; i++)
			{
				if(this.obj.text.length < i) texto[i] = "";
				else texto[i] = this.obj.text.charAt(i);
			}
			
			if (key >= 48 && key <= 122)
			{//typeable characters
				while(pos < this.mascara.length)
				{
					// verifica se o caracter na posicao do cursor é um elemento da máscara
					if(this.mascara.charAt(pos) != " " && this.mascara.charAt(pos) != "A" && this.mascara.charAt(pos) != "M" && this.mascara.charAt(pos) != "D" && this.mascara.charAt(pos) != "9" && this.mascara.charAt(pos) != "a" && this.mascara.charAt(pos) != "*")
					{// se for um elemento da mascara, adiciona o mesmo no texto e passa para a próxima posição
						texto[pos]=this.mascara.charAt(pos);
						pos++;
						continue;
					}
					else
					{// se não for um caracter da mascara, verifica se o mesmo é permitido
						switch(this.mascara.charAt(pos))
						{
							case "9":
								reChar = new RegExp(charMap.num);
								break;
							case "a":
								reChar = new RegExp(charMap.char);
								break;
							case "*":
								reChar = new RegExp(charMap.all);
								break;
							case " ":
								reChar = new RegExp(charMap.all);
								break;
							default:
								reChar = new RegExp(charMap.num);
								break;
						}
						
						igual= reChar.exec(char);
						
						if(igual)
						{
							texto[pos]=char;
							pos++;
						}
						break;
					}					
				}
				// devolve o texto para o input
				this.obj.text = texto.join("");
				// seta a nova posição do cursor
				setCaretPosition(pos);
				ev.preventDefault();
			}
			else ev.preventDefault();
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem algo errado, meus campos de texto estão alterando o valor para a formatação ao invés de formatar, ou seja:

 

se uso: new Mask(cpf,"000.000.000-00");

 

ele simplesmente coloca o valor "000.000.000-00" no campo, se eu tento apagar, assim que digito qualquer tecla, ele escreve tudo novamente.

O que está havendo? :upset:


Tem algo errado, meus campos de texto estão alterando o valor para a formatação ao invés de formatar, ou seja:

 

se uso: new Mask(cpf,"000.000.000-00");

 

ele simplesmente coloca o valor "000.000.000-00" no campo, se eu tento apagar, assim que digito qualquer tecla, ele escreve tudo novamente.

O que está havendo? :upset:

OPS!! O carácter correto é o 9, funcionou...
É porque já vi uma classe em que o número utilizado na formatação não impotava! Desculpem-me!
:yes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.