function applyPhoneMask() { $("input[mascara='telefone']").intlTelInput({ allowExtensions: false, autoFormat: true, autoHideDialCode: true, autoPlaceholder: true, defaultCountry: "BR", //geoIpLookup: function (callback) { // $.get('http://ipinfo.io', function () { }, "jsonp").always(function (resp) { // var countryCode = (resp && resp.country) ? resp.country : ""; // callback(countryCode); // }); //}, //nationalMode: false, initialCountry: "auto", numberType: "MOBILE", //onlyCountries: ['us', 'gb', 'ch', 'ca', 'do'], preferredCountries: ['BR'], utilsScript: "js/utils.js" //utilsScript : "https://raw.githubusercontent.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/phonenumberutil.js" }); //sobreescrita do metodo KEYPRESS para tratar o nono digito BrazilianPhoneFormat.applyAdjustment(); } //realiza formato do DDD de um campo de texto //estende evento de mascara do campo de telefone //entretanto realiza as adaptacoes da mascara var BrazilianPhoneFormat = { //lista de DDD no brasil no qual aplicara a regra do primeiro digito ddd: [34, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 61, 62, 63, 64, 65, 66, 67, 68, 69], //campos de texto input: undefined, //aplica eventos para ajuste applyAdjustment: function () { //obtem entrada this.input = $("input[type='tel']"); //adiciona evento de keyup this.input.keyup(BrazilianPhoneFormat.keyEvent) .keydown(BrazilianPhoneFormat.keyEvent); }, //evento de keyup keyEvent: function (evt) { if (BrazilianPhoneFormat.input == undefined || evt == undefined) return; var $this = $(this); /* if (evt.which == KeyCode.BACKSPACE) return; */ //formata valor var formatted = BrazilianPhoneFormat.makeAdjustment($this.val()); //define valor ajustado $this.val(formatted); }, makeAdjustment: function (value) { //obtem componentes (codigo pais, codigo area, numero) var components = value.split(' '); //se possui apenas um tamanho if (components.length == 1) return BrazilianPhoneFormat.checkAndApplyMask(value); return value; /* //se nao possui 3 componentes, retorne o proprio valor if (components.length != 3) return value; //se codigo nao for +55 e ddd nao estiver na lista a aplicar, retorne valor if(!BrazilianPhoneFormat.canApplyCountryCodeAndDDD(components[0], components[1])) return value; //extrai as componentes do numero (laod esquerdo e direito) //indicado pela existencia de hifen var numberComponents = components[2].split("-"); //se nao existir as duas componentes retorna valor padrao if (numberComponents.length != 2) return value; //retorna numero ajustado return BrazilianPhoneFormat.adjust(components[0],components[1], numberComponents[0], numberComponents[1]); */ }, //verifica se pode aplicar para ddd e codigo do pais canApplyCountryCodeAndDDD: function(countryCode, areaCode){ //se nao for o brasil, retorne proprio valor if (countryCode != '+55') return false; //realiza parse do codigo de area, retorne valor areaCode = parseInt(areaCode); //se nao se trata dos DDD que devem ser ajustados if (areaCode != NaN && BrazilianPhoneFormat.ddd.indexOf(areaCode) < 0) return false; return true; }, //caso ao colocar numero de 9 digitos a mascara //juntar para uma string sem espacos //apenas aplica a mascara se: //*contem 3 + 2 + 9 = 14 caracteres //*os 3 primeiros caracteres forem +55 //*os demais 2 caracteres forem ddd checkAndApplyMask: function (value) { if (value.length != 14) return value; var countryCode = value.substring(0, 3); var areaCode = parseInt(value.substring(3, 5)); var digitsOnLeft = value.substring(5, 10); var digitsOnRight = value.substring(10); //se codigo do pais nao for +55 e ddd invalido, retorne valor if (!BrazilianPhoneFormat.canApplyCountryCodeAndDDD(countryCode, areaCode)) return value; //se o da esquerda nao inicia com 9 if (digitsOnLeft.search('9') != 0) return value; //realiza mascara return "{0} {1} {2}-{3}".format(countryCode, areaCode, digitsOnLeft, digitsOnRight); }, /* //realiza ajuste de digitos adjust: function (countryCode, areaCode, digitsOnLeft, digitsOnRight) { if (digitsOnLeft.search("9") == 0) { //se possui 4 digitos a esquerda if (digitsOnLeft.length == 4 && digitsOnRight != "") { //passa primeiro digito da parte da direita para o final da esquerda digitsOnLeft = digitsOnLeft + digitsOnRight[0]; //remove primeiro digito da direita digitsOnRight = digitsOnRight.substring(1); } //se numero contem 8 digitos if (digitsOnRight.length == 5 && digitsOnRight.length == 3) { //adiciona no digito a direita digitsOnRight = digitsOnLeft.substring(digitsOnLeft.length - 1) + digitsOnRight; //remove primeiro digito da direita digitsOnLeft = digitsOnLeft.substring(0, digitsOnLeft.length - 1); } } return countryCode + " " + areaCode + " " + digitsOnLeft + "-" + digitsOnRight; }, */ }