2012-02-15 13 views
7

Alguien me puede mostrar el error de mis maneras cuando se trata de esta expresión regular:Ayuda de expresiones regulares para Validato - dd/mm/aaaa - PHP

if(preg_match("/^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$/", $_POST["date"]) === 0) { 
    echo 'error'; 
} 

Básicamente quiero esto para visualizar un mensaje de error cada vez, a menos que el formato sea correcto (dd/mm/aaaa).

¿Qué estoy haciendo mal con lo de arriba?

Muchas gracias por cualquier apuntador.

- expresiones regulares actualizado anteriormente poco después de la publicación - disculpas por las molestias -

+1

Utilice un probador de expresiones regulares en línea ex. http://www.regexpal.com/ – betontalpfa

Respuesta

15

creo que debe escapar de las barras /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/

+0

Muchas gracias por esto. Voy a marcar verde en breve :) – michaelmcgurk

+0

gracias. este trabajo para mí también. Te voté. –

4

Es necesario para escapar de la barra dado que está utilizando como delimitador de expresiones regulares

/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/ 

o utilizar diferentes expresiones regulares delimitadores

#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$# 
+0

Fantástico. Eso ahora funciona perfectamente. Tonto yo :) – michaelmcgurk

4

También puede utilizar esta:

([0-2]\d|3[0-1])\/(0\d|1[0-2])\/(19|20)\d{2} 

si se quiere diferenciar entre las fechas y meses, sino también validar sólo 2 siglos.

+0

Y si necesita capturar '^ ([0-2] \ d | 3 [0-1]) \/(0 \ d | 1 [0-2]) \/((?: 19) | 20) \ d {2}) $ 'y también han agregado anclas iniciales y finales. También hay un error que data de cero día y mes y funcionará '00/00/1999 '. –

2

lo uso para las fechas de cheques

private function validate_date($date, $empty_allowed = true) { 

    if (empty($date)) { 
     return $empty_allowed; 
    } 

    if (! strpos($date, '/')) { 
     return false; 
    } 

    if (substr_count($date, '/') !== 2) { 
     return false; 
    } 

    if (preg_match('/(0[1-9]|1[0-9]|3[01])\/(0[1-9]|1[012])\/(2[0-9][0-9][0-9]|1[6-9][0-9][0-9])/', $date) !== 1) { 
     return false; 
    } 

    $split = explode('/', $date); 

    return checkdate($split[1], $split[0], $split[2]); 

} 
Cuestiones relacionadas