Регулярное выражение, необходимое для проверки даты / времени - PullRequest
0 голосов
/ 26 июля 2010

Мне нужно регулярное выражение PHP 5 для следующего формата даты / времени:

10 июля 2010 г. 15: 00

(2 цифры пробела 3 символа пробела 4 цифры пробела 2 цифры двоеточие 2цифры)

Регистр символов не имеет значения, и единственный допустимый ввод - это az, 0-9, пробел, двоеточие

Заранее спасибо.

1 Ответ

3 голосов
/ 26 июля 2010

Это в точности соответствует вашей спецификации, которая допускает что-либо в качестве значения месяца.

Как видите, я сгруппировал каждую часть даты, чтобы вы могли ее легко переформатировать.

Если строка не совпадает, $ m будет 0.

linux-t77m:/home/vinko$ more preg.php
<?php
$d = "10 Jul 2010 15:00";
$m = preg_match("/(\d{2})\s([a-z]{3})\s(\d{4})\s(\d{2}):(\d{2})/i",$d,&$matches);
print_r($matches);
?>
linux-t77m:/home/vinko$ php preg.php
Array
(
    [0] => 10 Jul 2010 15:00
    [1] => 10
    [2] => Jul
    [3] => 2010
    [4] => 15
    [5] => 00
)

Чтобы убедиться, что у вас есть только действительные месяцы, вы можете использовать вместо этого регулярное выражение

$m = preg_match("/(\d{2})\s(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s(\d{4})\s(\d{2}):(\d{2})/i",$d,&$matches);

Но ... теперь вы соответствуете только английским месяцам.

Это скоро станет громоздким. Я настоятельно рекомендую вам использовать библиотеку обработки времени и даты и позволить ей справиться со всеми этими проблемами.

...