Categorias

Formatação de nomes próprios com ASP

É muito comum em um sistema que utiliza cadastros com banco de dados com nomes próprios desformatados; alguns nomes todos em caixa alta e outros todos em caixa baixa. Isso ocorre pois cada pessoa tem o seu jeito de digitar, apesar de incorreto.

O que ocorre, na verdade, é que ao emitir um relatório, por exemplo, os nomes ficam com a formatação errada e atrapalha até leitura e também a compreensão dos nomes.

Depois de ver diversos nomes mal formatados em sites e sistemas, decidi criar uma função de formatação de nomes próprios.

Dessa forma ‘JOÃO DA SILVA’ ou ‘joão da silva’ será formatado como João da Silva.

Observe que existe uma exceção, as preposições. Elas diferentemente dos nomes, não podem ter a primeira letra em maiúsculo.

Veja outros exemplos de formatação:
JOSÉ FRANCISCO DOS SANTOS ficará José Francisco dos Santos
joão de oliveira carvalho e silva ficará João de Oliveira Carvalho e Silva

Para utilizar a função basta passar o nome (desformatado) como parâmetro que ela retornará formatada. Simples assim. Diga adeus aos nomes desformatados.

Veja este código em funcionamento

<%
'-----------------------------------------------------
'Função: FormataNome(ByVal Nome)
'Sinopse: Formata nome próprio para que as primeiras
'		  letras fiquem maiúsculo (com exceções)
'Parametro:
'	Nome = Nome próprio a ser formatado
'Autor: Gabriel Fróes (www.codigofonte.com.br)
'Data: 20/10/2008
'-----------------------------------------------------
Function FormataNome(ByVal Nome)
	'Declarações
	Dim arrNome
	Dim Retorno
	Dim Cont
	Dim objER
	Dim Excecoes
	
	'Inicializando e configurando o objeto (expressão regular)
	Set objER		= New RegExp
	objER.IgnoreCase= True
	objER.Global	= True
	Excecoes		= "^(da|das|de|do|dos|e)$"
	objER.Pattern	= Excecoes
	
	'Por padrão o nome todo ficará minúsculo
	Nome = Lcase(Replace(Nome, "  ", " "))
	
	'Gerando um array com todas as palavras individualmente
	arrNome = Split(Nome, " ")
	
	Retorno = ""
	
	For Cont = 0 To Ubound(arrNome)
		arrNome(Cont) = Trim(arrNome(Cont))	
		'Colocando a primeira letra de cada palavra maiúscula (salvo exceções)
		If Not objER.Test(arrNome(Cont)) Then
			If Not arrNome(Cont) = "" Then
				arrNome(Cont) = Ucase(Left(arrNome(Cont), 1)) & Right(arrNome(Cont), Len(arrNome(Cont))-1)
			End If
		End If
		Retorno = Retorno & " " & arrNome(Cont)
	Next
	
	'Destruindo o objeto (expressão regular)
	Set objER = Nothing
	
	'Retorno da função
	FormataNome = Trim(Retorno)
End Function


'Teste de utilização da função
Response.Write FormataNome ("JOSÉ FRANCISCO DOS SANTOS") & "
" Response.Write FormataNome ("joão de oliveira chavier e silva") & "
" %>