A boa e velha função trim() é uma excelente pedida em qualquer linguagem, e chega a ser supreendente que javascript não a possua nativamente. Além de eliminar espaços em branco (assim como tabulações) de uma string, é também uma boa maneira pra se fazer algumas validações (como por exemplo verificar se um campo obrigatório não foi preenchido somente com espaços).
Já vi diversas implementações da função trim() – assim como de ltrim() e rtrim() – em javascript, mas acho que nenhuma tão elegante quanto a presente em http://www.somacon.com/p355.php.
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, ”);
}String.prototype.ltrim = function() {
return this.replace(/^\s+/, ”);
}String.prototype.rtrim = function() {
return this.replace(/\s+$/, ”);
}
Utilizando-se de expressões regulares para fazer as substituições de espaços por vazio, o grande lance de elegância de código é utilizá-la como membro do protótipo do objeto String. Assim, basta chamar o método em qualquer váriavel do tipo String, como por exemplo variable.trim().
Ótima pedida para adicionar-se em um arquivo .js para incluir em todas as páginas.
Uma coisa que eu tentei rapidinho fazer e não consegui é adicionar ao protótipo de um objeto uma propriedade baseada em um método. Explico melhor por um exemplo: eu gostaria de adicionar uma propriedade booleana empty para realizar validação; a definiria baseada no resultado de trim(), algo mais ou menos como
String.prototype.empty = (this.trim().length == 0 ? true : false);
Criar a propriedade baseado em um valor é tranquilo (String.prototype.empty = false). Mas e baseado no resultado de uma função que foi definida no protótipo? Alguém sabe como?



#1 by Flavio Sampaio on September 15, 2008 - 4:25 PM
Quote
Cara, sua explicação é muito boa.
Mas, fiquei sem sabem como pego o resultado.
Quero dizer que nao consigo tirar os benditos espaços em branco do inicio nem do fim da string.
Voce poderia, por favor, me postar um exemplo prático?
Obrigado
#2 by Ulisses on October 29, 2008 - 4:55 PM
Quote
Simples: use o método nativo replace ao invés de usar a função definida pelo usuário trim().
#3 by Guilherme on May 14, 2009 - 2:09 PM
Quote
Senhor, o codigo que criou deveria ser da seguinte maneira:
String.prototype.empty = function () {return (this.trim().length == 0 ? true : false)};
Deverá ser usado:
vazia = “”;
if (vazia.empty()) {
// string vazia
}