CategoryExpressão Regular

Expressões Regulares – REGEX para iniciantes

Regular Expressions, RE, REGEX, Expressões Regulares, ER… ou aquelas letrinhas e símbolos dentro de colchetes e parênteses que não fazem o menor sentido, mas aparecem em diversos lugares quando estamos programando, seja em php, em javascript..


Continue reading

Mascara campo de telefone em javascript com regex – Nono dígito – Telefones São Paulo

Boas!

Fiz uma rápida adaptação da expressão regular, usada na função mtel(). Que eu já havia postado aqui:
http://wbruno.com.br/2011/03/12/diversas-mascaras-com-er/

Aumentei o maxlenght de 14 para 15.

<html>
<head>
    <title>Mascara Telefone</title>
    <script type="text/javascript" src="mtel.js"></script>

</head>
<body>

    <input type="text" name="telefone" onkeyup="mascara( this, mtel );" maxlength="15" />

</body>
</html>

E o mtel.js

/* Máscaras ER */
function mascara(o,f){
    v_obj=o
    v_fun=f
    setTimeout("execmascara()",1)
}
function execmascara(){
    v_obj.value=v_fun(v_obj.value)
}
function mtel(v){
    v=v.replace(/\D/g,"");             //Remove tudo o que não é dígito
    v=v.replace(/^(\d{2})(\d)/g,"($1) $2"); //Coloca parênteses em volta dos dois primeiros dígitos
    v=v.replace(/(\d)(\d{4})$/,"$1-$2");    //Coloca hífen entre o quarto e o quinto dígitos
    return v;
}

Alterei a segunda expressão regular, para funcionar de forma invertida. De trás para frente.
Contar os 4 últimos dígitos finais, e colocar o hífen antes deles. Deixando assim, o DD quatro ou cinco dígitos, depois o hífen, e os próximos quatro dígitos.

Usou ? gostou ?
Comente!!

— update —

Apenas para alertar que a forma acima, não é a melhor maneira de implementar.
Devemos separar as camadas, e deixar a chamada do script do lado do js. Dessa forma aqui:

<html>
<head>
    <title>Mascara Telefone</title>
<script type="text/javascript">
/* Máscaras ER */
function mascara(o,f){
    v_obj=o
    v_fun=f
    setTimeout("execmascara()",1)
}
function execmascara(){
    v_obj.value=v_fun(v_obj.value)
}
function mtel(v){
    v=v.replace(/\D/g,"");             //Remove tudo o que não é dígito
    v=v.replace(/^(\d{2})(\d)/g,"($1) $2"); //Coloca parênteses em volta dos dois primeiros dígitos
    v=v.replace(/(\d)(\d{4})$/,"$1-$2");    //Coloca hífen entre o quarto e o quinto dígitos
    return v;
}
function id( el ){
	return document.getElementById( el );
}
window.onload = function(){
	id('telefone').onkeyup = function(){
		mascara( this, mtel );
	}
}
</script>

</head>
<body>

    <input type="text" name="telefone" id="telefone" maxlength="15" />

</body>
</html>

Detectando browser mobile com javascript

Boas!!

Eu previsava de uma função que detectasse se o visitante estava utilizando um browser mobile, achei esta aqui na internet:

function isMobile() {
    return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER['HTTP_USER_AGENT']);
}

funciona bem, está tecnicamente bem escrita, e resolvia a questão.

Fiz uma versão em javascript, ficou assim:

/**
 * @function isMobile
 * detecta se o useragent e um dispositivo mobile
 */
function isMobile()
{
	var userAgent = navigator.userAgent.toLowerCase();
	if( userAgent.search(/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i)!= -1 )
		return true;
}

Ambas se baseiam no cabeçalho user agent que cada browser envia junto com a requisição http.
O funcionamento é o mesmo nas duas, logicamente não tenho todos esses aparelhos, consegui testar num tablet samsung, no iphone, e em outros 2 androids.

É isso, conseguiu testar com mais algum dispositivo ?
Caso não tenha “funcionado”, me envie o user agent dele, para que eu inclua na expressão regular.

Formatar em moeda reais com expressão regular em javascript

Boas!
Fiz aqui rapidinho uma função getMoney() que recebe uma string no formato: R$ 1.000,00 e retorna um inteiro, para podermos fazer contas em javascript.
Depois uma outra função formatReal() que recebe um inteiro e devolve o número formatado segundo a nossa moeda: Real.

Entrada:

console.log( formatReal( 1000 ) );
console.log( formatReal( 19990020 ) );
console.log( formatReal( 12006 ) );
console.log( formatReal( 111090 ) );
console.log( formatReal( 1111 ) );
console.log( formatReal( 120090 ) );

Saida:

10,00
199.900,20
120,06
1.110,90
11,11
1.200,90

Utilizei a função str.replace() nativa da linguagem javascript, e algumas expressões regulares.
Atualmente só formata até 999mil reais, não fiz a ER para colocar o ponto dos milhões.

<script type="text/javascript">

var test = 'R$ 1.700,90';


function getMoney( str )
{
        return parseInt( str.replace(/[\D]+/g,'') );
}
function formatReal( int )
{
        var tmp = int+'';
        tmp = tmp.replace(/([0-9]{2})$/g, ",$1");
        if( tmp.length > 6 )
                tmp = tmp.replace(/([0-9]{3}),([0-9]{2}$)/g, ".$1,$2");

        return tmp;
}


var int = getMoney( test );
//alert( int );


console.log( formatReal( 1000 ) );
console.log( formatReal( 19990020 ) );
console.log( formatReal( 12006 ) );
console.log( formatReal( 111090 ) );
console.log( formatReal( 1111 ) );
console.log( formatReal( 120090 ) );
console.log( formatReal( int ) );


</script>

Remover tudo oque não for dígito(numeros) de string com javascript

Uma simples expressão regular, e o método .replace() do javascript.

<script type="text/javascript">
var str = 'capa1';
alert( str.replace(/[^\d]+/g,'') )
</script>