Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kania

Validação de data

Recommended Posts

Pessoal dei uma procurada no froum sobre3 o assunto VALIDAÇÃO DE DATA achei alguns artigos mas nada que cehgasse onde eu quero, ai navegando na net achei um código que aprece ser o que preciso o probelma é que não consigo utilizar o código, vejam o que preciso fazer.

 

 

vamos dizer que tenho a seguinte data

 

12/01/2009

 

preciso verificar se o DIA é valido se o MES é válido e se o ANO é valido

 

pois o usuário pr distração pode digitar algo do tipo

 

12/10/2009 seria invalido, pois estamos ainda no mês 01 1 não 10

12/01/2010 tbm invalido pois estamos em 2009

29/02/2009 invalido pois 2009 não é bissesto logo fevereiro não pode ter 29 dias

31/04/2009 invalido pois abril não tem 31 dias

 

o código que consegui é este

 

'valido uma data 
'espero receber tres strings com o dia, o mes e o ano 

function validarData(dia,mes,ano) 

  'elimino possiveis espacos aos lados dos numeros que recebo por parametro 

  dia = trim(dia) 
  mes = trim(mes) 
  ano = trim(ano) 

  'comprovo nº de caracteres que recebo em cada parametro sao os permitidos 
  'O ano pode ter ate 4 caracteres 

  if len(dia)=0 or len(dia)>2 or len(mes)=0 or len(mes)>2 or len(ano)=0 or len(ano)>4 then 
	validarData = false 
	exit function 
  end if 

  'compovo que os caracteres dos parametros sao numeros 

  if (not isNumeric(dia)) or (not isNumeric(mes)) or (not isNumeric(ano)) then 
	validarData = false 
	exit function 
  end if 

  'O mes nao pode ser maior que 12 nem menor que 1 

  mes = cint(mes) 
  if mes > 12 or mes < 1 then 
	validarData = false 
	exit function 
  end if 
  dia = cint(dia) 

  'O dia nao pode ser menor que 1 

  if dia < 1 then 
	validarData = false 
	exit function 
  end if 

  'O dia, dependendo do mes que seja, pode ter uns ou outros valores 

  if mes=1 or mes=3 or mes=5 or mes=7 or mes=8 or mes=10 or mes=12 then 

	'nesses meses pode ter 31 dias 

	if dia > 31 then 
	  validarData = false 
	  exit function 
	end if 
  elseif mes=2 then 

	'en fevereiro temos que ver se sera ano bissexto 
	'consigo o numero de ano de 4 cifras. 
	'se nos derem um valor de 2 cifras < 31 se refere a 2000 mais esse valor 

	if ano < 31 then 
	  ano = ano + 2000 

	'se nos derem um valor de 2 cifras > 31 se refere a 1900 mais esse valor 

	elseif ano < 100 then 
	  ano = ano + 1900 
	end if 

	'calculo se o ano eh bissexto 
	'se for divisivel por quatro e (nao divisivel por 100 ou divisivel por 400) 

	if ((ano mod 4)=0) and ((ano mod 100)<>0 or (ano mod 400)=0) then 

	  'eh bissexto 

	  if dia > 29 then 
		validarData = false 
		exit function 
	  end if 
	else 

	  'NAO eh bissexto 

	  if dia > 28 then 
		validarData = false 
		exit function 
	  end if 
	end if 
  else 

	'em todos os demais meses chegam a ter 30 dias 

	if dia > 30 then 
	  validarData = false 
	  exit function 
	end if 
  end if 

  'se estou aqui eh porque todas as comprovacoes foram positivas 

  validarData = true 
end function

Agora como usar esta função?

Dei um Response.Write validarData para ele me mostrar o conteúdo da variavle validarData mas não mostra nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

por que nao usar IsDate e ver se o conjunto todo é valido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo mas o IsDate me verifica a data em um todo e não por parte certo/

Eu testei e verifiquei algumas falas, por exemplo se eu digitar 13/01 ele da data como valida e não deveria afinal esta faltando o ano.

Mas não tenho certeza, não fiz todos os testes co o IsDate

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode usar essa regexp. para validar,muito útil,realiza a validação utilizando o seguinte formato: DD/MM/YYYY.

 

Onde:

- DD é o dia

- MM é o mês

- YYYY é o ano (com 4 dígitos

 

Function IsData(ByVal strData)
	'Validando o formato da data com expressão regular
	Set regEx = New RegExp							'Cria o Objeto Expressão
	regEx.Pattern = "^(([0-2]d|[3][0-1])/([0]d|[1][0-2])/[1-2][0-9]d{2})$"	' Expressão Regular
	regEx.IgnoreCase = True							' Sensitivo ou não
	regEx.Global = True								
	
	Retorno	= RegEx.Test(strData)
	If Retorno = True Then
		'Verificando realmente se a data é uma data válida
		If IsDate(strData) Then
			Retorno = True
		Else
			Retorno = False
		End If
	End If
	
	'Retornando a função
	IsData = Retorno
	
	'Destruindo os objetos
	Set regEx = Nothing
End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas isDate resolve, conforme o Mario disse.

 

Se você informar 12/01 e verificar, ele vai dizer que é valido pq a função entende que o ano que completa, é o ano atual. Ex. 12/01 = 12/01/2009. Para "contornar" isso, você pode usar a função formatDateTime.

Se você informar 31/02/2009, ele vai dizer que é falso pq fevereiro não tem 31 dias.

 

<%
data = "12/01"
If isDate(data) Then
	data = formatDateTime(data,2)
	Response.Write data
End If
%>

A função do Xan parece ser boa também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao vejo nada melhor do que o isdate

 

mas diga qual a sua dificuldade em usar a mesma?

 

nem tenho certeza se ele completa o ano mas se mesmo se nao completar voce pode fazer isso via codigo

 

é mais simples do que usar POG's desnecessarias

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Xan, cara como eu uso esta Função.

Veja no final dela coloquei

 

Response.Write IsData

Para chamar a função, afinal preciso informar algo na tela para o usuário de que a data esta incorreta.

 

veja como tentei fazer.

 

strData = "15/01/2009"

 

Function IsData(ByVal strData)
	'Validando o formato da data com expressão regular
	Set regEx = New RegExp							'Cria o Objeto Expressão
	regEx.Pattern = "^(([0-2]d|[3][0-1])/([0]d|[1][0-2])/[1-2][0-9]d{2})$"	' Expressão Regular
	regEx.IgnoreCase = True							' Sensitivo ou não
	regEx.Global = True								
	
	Retorno	= RegEx.Test(strData)
	If Retorno = True Then
		'Verificando realmente se a data é uma data válida
		If IsDate(strData) Then
			Retorno = True
		Else
			Retorno = False
		End If
	End If
	
	'Retornando a função
	IsData = Retorno
	
	   
	
	'Destruindo os objetos
	Set regEx = Nothing
End Function

	If Retorno = truethen
		Response.Write "Valido"
	else
		Response.Write "Invalido"
	end if

Sendo que tenti também

 

 

If IsData= true then
		Response.Write "Valido"
	else
		Response.Write "Invalido"
	end if

Também

 

If IsData= true then
		Response.Write "Valido"
	else
		Response.Write "Invalido"
	end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Ted k, fera foi o que eu fiz no inicio da função coloquei:

 

 

data = "14/01/2009"

verificadata = IsData(data)


If verificadata = true then
	Response.Write "Valido"
else
	Response.Write "Invalido"
end if

Porem ele sempre da como invalido, independente da data que se coloque

Compartilhar este post


Link para o post
Compartilhar em outros sites

modifiquei e fiz assim agora

 

strData = "14/01/2009"

Function IsData(ByVal strData)
	'Validando o formato da data com expressão regular
	Set regEx = New RegExp							'Cria o Objeto Expressão
	regEx.Pattern = "^(([0-2]d|[3][0-1])/([0]d|[1][0-2])/[1-2][0-9]d{2})$"	' Expressão Regular
	regEx.IgnoreCase = True							' Sensitivo ou não
	regEx.Global = True								
	
	Retorno = RegEx.Test(strData)
	If Retorno = True Then
		'Verificando realmente se a data é uma data válida
		If IsDate(strData) Then
			Retorno = True
		Else
			Retorno = False
		End If
	End If
	
	'Retornando a função
	IsData = Retorno
	
	
	
	'Destruindo os objetos
	Set regEx = Nothing
End Function

Response.Write IsData(strData)

Mas da mesma forma ainda continua dando como false em todas as situações, onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Altera a expressão regular para:

regEx.Pattern = "^((0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2})$"

Compartilhar este post


Link para o post
Compartilhar em outros sites

ainda não consegui compreender o que tem de errado na função nativa IsDate pra estarem tentando resolver com expressões regulares

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu muito menos consigo entender

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também sou a favor do isDate... mas como quer usar expressão regular, mostrei a outra solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.