yyyy validar solo regulares regular probar preg_match letras fecha expresión expresiones expresion espacios php regex date

validar - ¿Qué es la expresión regular MM/DD/YYYY y cómo la uso en php?



probar expresiones regulares (9)

El problema es uno de los delimitadores y los caracteres escapados (como han mencionado otros). Esto funcionará:

$date_regex = ''/(0[1-9]|1[012])[- //.](0[1-9]|[12][0-9]|3[01])[- //.](19|20)/d/d/''; $test_date = ''03/22/2010''; if(preg_match($date_regex, $test_date)) { echo ''this date is formatted correctly''; } else { echo ''this date is not formatted correctly''; }

Tenga en cuenta que agregué una barra diagonal al principio y al final de la expresión y escapé (con una barra diagonal) las barras diagonales en el patrón.

Para ir un paso más allá, este patrón no extraerá adecuadamente el año ... solo el siglo. Debería cambiarlo a /(0[1-9]|1[012])[- //.](0[1-9]|[12][0-9]|3[01])[- //.]((?:19|20)/d/d)/ y (como señala Jan más abajo) si quieres asegurarte de que toda la cadena coincida (en lugar de algún subconjunto), querrás ir con algo más parecido a /^(0[1-9]|1[012])[- //.](0[1-9]|[12][0-9]|3[01])[- //.]((?:19|20)/d/d)$/ .

Como han mencionado otros, strtotime() podría ser una mejor opción si solo intentas strtotime() la fecha. Puede analizar casi cualquier formato de uso común y le dará una marca de tiempo de Unix. Puedes usarlo así:

$test_date = ''03/22/2010''; // get the unix timestamp for the date $timestamp = strtorime($test_date); // now you can get the date fields back out with one of the normal date/time functions. example: $date_array = getdate($timestamp); echo ''the month is: '' . $date_array[''month''];

Encontré la expresión regular para MM / DD / YYYY en http://www.regular-expressions.info/regexbuddy/datemmddyyyy.html pero no creo que la esté usando correctamente.

Aquí está mi código:

$date_regex = ''(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)/d/d''; $test_date = ''03/22/2010''; if(preg_match($date_regex, $test_date)) { echo ''this date is formatted correctly''; } else { echo ''this date is not formatted correctly''; }

Cuando ejecuto esto, todavía se repite "esta fecha no está formateada correctamente", cuando debería decir lo contrario. ¿Cómo configuro esta expresión regular en php?


Esto verifica fechas válidas desde MM/DD/1960 a MM/DD/2014

También acepta fechas como M/D/YYYY y 0M/0D/YYYY

^(?:[1-9]|0[1-9]|1[0-2])/(?:[0-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])/(?:20[6-9][0-9]|20[0-1][0-4])$


La expresión regular del autor de la pregunta es casi correcta. La fecha no se valida porque un patrón debe ser:

pattern="^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)/d/d$"

o si hay que ser elegante

pattern="^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)/d/d$"

Tenga en cuenta que este patrón solo comprueba el formato de una fecha y los valores máximo / mínimo para elementos de fecha individuales. Eso significa que se debe verificar la entrada de un usuario para verificar la validez de la fecha en la función de JavaScript y / o un Servidor (por ejemplo, el 29 de febrero no debe permitirse si un año no es un salto).

Como nota al margen, si desea permitir un solo dígito (digamos por un mes), cambie una parte del mes a

([0-9]|0[1-9]|1[012])

Explicación:
[0-9] - dígito único entre 0 y 9
o
0 [1-9] - dos dígitos entre 01 y 09
o
1 [012] - dos dígitos limitados a 10, 11, 12


Necesitas delimitadores correctos alrededor del patrón.

$date_regex = ''~(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)/d/d~'';


Para usar esta expresión regular para validar las fechas en el código PHP, debe formatearla correctamente como una cadena con delimitadores de expresiones regulares adicionales según lo requieran las funciones de preg de PHP. También debe agregar anclas para forzar la expresión regular para que coincida con toda la cadena (o, de lo contrario, no coincida):

$date_regex = ''%/A(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)/d/d/z%''; $test_date = ''03/22/2010''; if(preg_match($date_regex, $test_date)) { echo ''this date is formatted correctly''; } else { echo ''this date is not formatted correctly''; }

Por supuesto, una llamada a la biblioteca sería mejor en esta situación. La expresión regular permite fechas no válidas, como el 31 de febrero.

La expresión regular puede ser útil si desea analizar una cadena para las fechas. En ese caso no necesitas los anclajes. Es posible que aún necesite un control adicional para excluir las fechas no válidas. Eso depende de si se sabe que su entrada contiene solo fechas válidas o no.


Probablemente sea mejor usar strtotime () que convertirá casi cualquier formato de fecha legible por humanos en una marca de tiempo de Unix. - strtotime()


String timeStamp = "03/11/2018 17:51:45";

patrón estático privado TIMESTAMP_PATTERN = Pattern.compile ("(0? [1-9] | 1 [012]) / (0? [1-9] | [1-2] [0-9] | 3 [0-1 ]) / "+" ([1-9] [0-9] {3}) ([0-1]? [0-9] | 2 [0-3]): ([0-5]? [ 0-9]): ([0-5]? [0-9]) ");

private static boolean isTimeStampValid(String timeStamp) { boolean isFeb = timeStamp.split("/")[0].matches("(0?[2])"); if (isFeb) { boolean isValidFebDate = timeStamp.split("/")[1].matches("(0?[1-9]|1[1-9]|2[0-8])"); if (!isValidFebDate) return false; } return TIMESTAMP_PATTERN.matcher(timeStamp).matches(); }


Su regex necesita delimitadores:

/(0[1-9]|1[012])[- //.](0[1-9]|[12][0-9]|3[01])[- //.](19|20)/d/d/


También puede utilizar la función checkdate() . No hay necesidad de expresiones regulares.

$str="03/22/2010"; list($mth,$day,$yr)=explode("/",$str); var_dump(checkdate($mth,$day,$yr));