Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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();
}
}
}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 TextInputE para AS2??
Muitíssimo útil! Parabéns.
Obrigado por compartilhar.
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
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();
}
}
}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:
legal hunternh, testei aqui e funcionou perfeita, valew por compartilhar conosco
[]´s