Jump to content

regex


darky_miguel

Recommended Posts

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)))$";

Link to comment
Share on other 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

Link to comment
Share on other 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 ?

😕

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';
}

😕

Link to comment
Share on other 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
}

"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Link to comment
Share on other 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 😛 ) tu compreendas que eu digo isso porque sei ^^

Link to comment
Share on other sites

Ilumina-me 😛

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? 🙂

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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? 😛

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 🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.