hunternh 2 Denunciar post Postado Março 18, 2008 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
Eder Fortunato 15 Denunciar post Postado Março 20, 2008 legal hunternh, testei aqui e funcionou perfeita, valew por compartilhar conosco []´s Compartilhar este post Link para o post Compartilhar em outros sites
JHerrscher 0 Denunciar post Postado Março 19, 2009 E para AS2?? Compartilhar este post Link para o post Compartilhar em outros sites
brunobispo 20 Denunciar post Postado Abril 1, 2009 Muitíssimo útil! Parabéns. Obrigado por compartilhar. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Abril 4, 2009 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
pablo erick cardoso 0 Denunciar post Postado Junho 8, 2009 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
Web Developer 0 Denunciar post Postado Abril 15, 2014 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