|
|
|
#1 |
|
Power Member
Data do Registo: 30-11-2005
|
Solução Validação de datas em c# [Expressão regular]
Como validar uma data c#
Código:
#region [valida datas]
/*************Datas**********/
/*validacao de comparação entre duas datas ,
* datai - datainicial,
* dataf - datafinal,
* label - label erro da data final*/
public bool comparadatas(DateTime datai, DateTime dataf, System.Web.UI.WebControls.Label label)
{
bool res = false;
if (dataf >= datai)
{
res = true;
label.Text = "<span class=\"erroverdade\">*</span> ";
}
else
{
res = false;
label.Text = "<span class=\"errofalso\">*</span> ";
}
return res;
}
/*Validação geral d um campo data */
/* data - string da data inserida na textbox
* dataminima - string da data minima que pode ser inserida
* label - id da labelde erro referente a um determinado campo */
public bool VDatas(string data, string dataminima, System.Web.UI.WebControls.Label label)
{
bool resul = false;
// testa para caixa de data decisão vazia
if (data == "")
{
label.Text = "<span class=\"errofalso\">*</span> ";
resul = false;
}
// valida campo diferente de vazio
if (data != "")
{
//valida para campo com 10 caracteres e campo com tim e 10 caracteres
if ((data.Length == 10) || (data.Length == 10))// testa p numero de caracteres
{
// testa se e data valida
if (validaData(data))
{
string datamin = dataminima;
string strdatamin = datamin.Substring(6, 4) + "-" + datamin.Substring(3, 2) + "-" + datamin.Substring(0, 2);
DateTime datageral2 = Convert.ToDateTime(strdatamin);
string str = data.Substring(6, 4) + "-" + data.Substring(3, 2) + "-" + data.Substring(0, 2);
DateTime datageral = Convert.ToDateTime(str);
//testa se é menor ou igual que a data actual
if (datageral <= datageral2)
{
label.Text = "<span class=\"errofalso\">*</span>";
resul = false;
}
//testa se é maior que a data actual
if (datageral > datageral2)
{
label.Text = "<span class=\"erroverdade\">*</span>";
resul = true;
}
}
else
{
label.Text = "<span class=\"errofalso\">*</span>";
resul = false;
}
}
else
{
label.Text = "<span class=\"errofalso\">*</span>";
resul = false;
}
}
return resul;
}
//valida data no ambito da sua formatação
private bool validaData(string str)
{
Regex Data = new Regex(@"^((((0?[1-9]|[12]\d|3[01])[\-](0?[13578]|1[02])[\-]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\-](0?[13456789]|1[012])[\-]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\-]0?2[\-]((1[6-9]|[2-9]\d)?\d{2}))|(29[\-]0?2[\-]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$");
return Data.IsMatch(str);
}
#endregion
validaData() , verifica tb se ano é bisexto ou n , recebe uma string data e verifica se a mesma é valida em ralaç ão a uma especificação, penso que esta formatada para dd-mm-aaaa, sempre a podes alterar devolvendo true caso seja valida e false caso contrario comparadatas(), compara se uma data é maior que outra devolvendo true caso verdade e false caso falso .... VDatas() tb devolve true ou false caso seja verdadeiro ou falso. esta faz tdas as verificações possiveis (pode faltar uma ou outra mas são suficientes),
Última edição de Armadillo : 30-01-2009 às 10:12 Razão: adicionada tag [code] |
|
|
|
|
|
#3 |
|
Power Member
Data do Registo: 30-11-2005
|
sim mas supoe que ao pores uma ata na txtbox queres validar se essa mesma data esta no formato
dd-mm-aaa ou dd/mm/aaa ou dd.nn.aaa , e por ai fora a expressão regular serve para isso mesmo |
|
|
|
|
|
#4 | |
|
Power Member
|
Citação:
... ou então usas uma expressão regular que suporte os casos todos, mas aí podem escapar-te alguns casos...
__________________
A minha thread de avaliação: http://www.techzonept.com/showthread.php?p=484844 [Uma curva belíssima, uma equipa fantástica... és a nossa fé!!!!!! FORÇA SPORTING allez!!] |
|
|
|
|
|
|
#5 |
|
Power Member
Data do Registo: 06-05-2002
Local: http://localhost
|
Separas o ano, mês e dia. Colocas num try catch e convertes para a data no formato que pretendes. Devolve true se correcta, false se não.
|
|
|
|
|
|
#6 |
|
Power Member
Data do Registo: 30-11-2005
|
mas nesse caso ficas com mais code
ai so tens uma linha com a expressão regular se da true é verdadeira se e false da falsa as restantes verificações so tem a ver com datas minimas e maximas, tamanho da data etc por isso a da expressão regular fica com menos code mas ambas as abordagens estão bem |
|
|
|
![]() |
| Marcadores |
![]() |
| Opções | |
| Mostrar Modos | |
|
|
|
Registe-se no fórum e active o seu registo para deixar de ver este anúncio. |