• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

darky_miguel

regex

21 mensagens neste tópico

pessoal eu tenho uma expressao regex para validar a data que valida anos bisseistos e tudo mas so funciona em javascript e cria por em php tambem mas nao funka pk os criterios devem ser diferentes mas nao sei como converter alguem me pode ajudar plz

a expressao e esta

"^(((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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que expressão regular mosntrusosa, não é melhor pegares no ano e veres se é divisível por quatro?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desculpa tar a ser chato mas podias me explicar ?  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que expressão regular mosntrusosa, não é melhor pegares no ano e veres se é divisível por quatro?

E não divisível por 100, excepto se também for divisível por 400 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desculpa tar a ser chato mas podias me explicar ?  :-[

Um ano bissexto ocorre de 4 em 4 anos, se obteres o módulo de 4 do Ano, se der 0 o ano é bissexto, se não der, não será :)

Algo como:

if($ano%4==0){
echo 'E bissexto! E bissexto!';
} else {
echo 'Nao e bissexto T_T';
}

:confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu fiz uma coisa assim com aquilo que me disseram


if (ereg ("([[:digit:]]{1,2})/([[:digit:]]{1,2})/([[:digit:]]{4})",$_POST['data_nascimento'], $regs)) {


   
$dia=$regs[1];
$mes=$regs[2];
$ano=$regs[3];
$minYear=1900;
$maxYear=2100;
   


if ($dia < 1 || $dia > 31)
{
$_SESSION['erro'].="O dia é inválido.";
$c++;		
}
else
{
	if ($mes==2)
	{
			if ($ano % 4 == 0 &&($ano % 100 != 0 || $ano % 400 == 0))
			{
				if ($dia>29)
				{ 
				$_SESSION['erro'].="o dia e invalido";
				$c++;
				}
			}
			else
			{
				if ($dia>28)
				{
				$_SESSION['erro'].="o dia e invalido";
				$c++;
				}
			}

	}


}
   
if ($mes < 1 || $mes > 12)
{
$_SESSION['erro'].="O mes é inválido.";
$c++;
}

if ($ano < $minYear || $ano > $maxYear)
	{
	$_SESSION['erro'].="Introduza um ano válido com 4 digitos entre $minYear e $maxYear";
	$c++;	
	}

} else {

    $_SESSION['erro'].="A data é inválida.";
$c++;

mas axo que pode ser melhorado pk nao valida o 31 e o 30

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não faças %100 nem %400, não muda nada.

E sim, esse código pode ser melhorado :)

Um aparte, sabes da existência disto http://php.net/elseif ?

:confused:

Ah e para validares o 31 e 30, em vez do módulo de 4, calculas o módulo de 2 do mês.

Se der 0 é 30, senão, é 31

Algo como:

$mes=date("m");
if($mes%2==0){
echo '30';
} else {
echo '31';
}

:confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Algo como:

$mes=date("m");
if($mes%2==0){
echo '30';
} else {
echo '31';
}

:)

E Agosto(8%2=0), Outubro (10%2=0), Dezembro(10%2=0)? Utiliza antes um switch

switch($mes){
      case 2: //É Fevereiro
      case 1,3,5,7,8,10,12 : // É de 31 dias
      case 4,6,9,11: //É de 30 dias
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora dumpster, olha para o número de dias que tem um ano e tenta descobrir porque é que os anos bissextos são esses.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora dumpster, olha para o número de dias que tem um ano e tenta descobrir porque é que os anos bissextos são esses.

lol Não te preocupes eu sei :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então é porquê?

lol? Talvez porque os anos bissextos têem 366 dias, e os "não-bissextos" têm 365?

Isto suponho para manter um equilibrio anual entre o movimento da Terra e o "tempo" (provavelmente por causa das estações do ano).

E após a leitura do artigo dado pelo Betovsky, aparentemente de 400 em 400 anos é ano bissexto, algo que não se aplica de 100 em 100 anos, fazendo estas regras um "override" à de 4 em 4 anos.

Lol a tua pergunta foi desnecessária ^^

1 - Não tem qualquer tipo de propósito.

2 - Se eu digo que sei, eu suponho que (pelo menos isso aplica-se normalmente, não sei quanto a ti :P) tu compreendas que eu digo isso porque sei ^^

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1 - Não tem qualquer tipo de propósito.

Nada do que eu digo é por acaso. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ilumina-me :P

Nada mais do que um teste. Ler a resposta que deste à pergunta deu para ver que tinhas uma ideia muito vaga, viste o link do Betovsky, leste na diagonal e respondeste. Se não tivesses lido só na diagonal, terias dito que existem anos bissextos por causa do movimento da Terra à volta do Sol, e que os 4 anos vem apenas de uma estimativa de que a Terra faz uma volta completa ao Sol enquanto dá 365.24qualquerCoisa voltas a si própria, e que o para dar uma média de dias por ano o mais aproximada possível desse número se tem que tirar 1 ano todos os 4 anos excepto se o ano for múltiplo de 100 e não for múltiplo de 400, que sabias que a importância da razão tempo calendário:tempo "solar" ser o mais próxima a 1 era de facto o atraso da vinda das estações do ano, algo que influenciava e muito a vida quotidiana na altura.

Iluminado? :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nada mais do que um teste. Ler a resposta que deste à pergunta deu para ver que tinhas uma ideia muito vaga, viste o link do Betovsky, leste na diagonal e respondeste. Se não tivesses lido só na diagonal, terias dito que existem anos bissextos por causa do movimento da Terra à volta do Sol, e que os 4 anos vem apenas de uma estimativa de que a Terra faz uma volta completa ao Sol enquanto dá 365.24qualquerCoisa voltas a si própria, e que o para dar uma média de dias por ano o mais aproximada possível desse número se tem que tirar 1 ano todos os 4 anos excepto se o ano for múltiplo de 100 e não for múltiplo de 400, que sabias que a importância da razão tempo calendário:tempo "solar" ser o mais próxima a 1 era de facto o atraso da vinda das estações do ano, algo que influenciava e muito a vida quotidiana na altura.

Iluminado? :P

Não.

Primeiro a única coisa que eu li do link do Betovsky, foram os 400-400, 100-100, porque eu sinceramente não tenho grande interesse por este assunto, nem quero provar nada, logo não vou tar a ler algo só para mostrar a alguém como tu "que sei".

Segundo, eu não sei que conteúdo o artigo tem, mas algo me diz que tu também andaste a ver por lá julgando pela tua resposta, o que me faz chegar à seguinte conclusão:

"Porque raio hei-de sentir-me iluminado por alguém que me pergunta algo que aprendeu há 5 minutos atrás?".

Eu também sei ler.

Have fun :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Segundo, eu não sei que conteúdo o artigo tem, mas algo me diz que tu também andaste a ver por lá julgando pela tua resposta, o que me faz chegar à seguinte conclusão:

"Porque raio hei-de sentir-me iluminado por alguém que me pergunta algo que aprendeu há 5 minutos atrás?".

O que aprendi há 5 mins atrás foi mesmo as datas em que foram feitas as alterações e os valores exactos, porque o resto já eu sabia. :P

Porém, o meu objectivo não era iluminar ninguém em relação a anos bissextos, era mesmo apenas "conhecer-te" e acho que não chegaste aí.

Qualquer coisa PM.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora