2012-02-19 2 views
2

Какое лучшее регулярное выражение соответствует дате RFC 2822?RFC 2822 Date Regex

В принципе, я хотел бы соответствовать Date: Sun, 19 Feb 2012 16:25:02 +0000, который появляется в некоторых письмах, которые я получаю, но в идеале не зависит от языка.

Я нашел ниже регулярное выражение в Интернете, но не знаете, как сделать месяц языконезависимым (но по-прежнему соответствует остальной) - я считаю, что месяц должен быть 3-х символов в спецификации, но не совсем уверен ...

/^(?:(Sun|Mon|Tue|Wed|Thu|Fri|Sat),\s+)?(0[1-9]|[1-2]?[0-9]|3[01])\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(19[0-9]{2}|[2-9][0-9]{3})\s+(2[0-3]|[0-1][0-9]):([0-5][0-9])(?::(60|[0-5][0-9]))?\s+([-\+][0-9]{2}[0-5][0-9]|(?:UT|GMT|(?:E|C|M|P)(?:ST|DT)|[A-IK-Z]))(\s+|\(([^\(\)]+|\\\(|\\\))*\))*$/ 
+0

Спецификация вашего часового пояса не заполнена. Например, мой часовой пояс - это EET, который не распространяется. Я курил и принимал любые три или четыре алфавита, а не пытался составить исчерпывающий список. – tripleee

+0

@tripleee Итак, для этого мне нужно будет изменить '(?: ST | DT)' to '(?: ST | ET | DT)' – MrJ

+0

Как я уже писал, это, скорее всего, еще не исчерпывающе. Мое воспоминание состоит в том, что вы не можете полагаться даже на последнюю букву, являющуюся Т, но я давно не исследовал это. Кстати, ITYM '[DES] T', но я повторю, я не думаю, что этого достаточно. См. Также http://en.wikipedia.org/wiki/Lists_of_time_zones – tripleee

ответ

0

Как указано в @tripleee, дата RFC2822 всегда будет английской. Но если вы анализируете даты из источника, который строго не соответствует RFC2822 и который может использовать другой язык, вам придется идентифицировать набор языков, которые могут быть использованы, и создать одно регулярное выражение, которое будет соответствовать любому месяцу/дню от имени недели с любого из этих языков. После этого вы можете использовать хеш для преобразования захваченных имен месяца/дня недели во внутреннее представление, которое хотите использовать.

+0

RFC2822 всегда английский. Некоторые производители ошибочно отклоняются, но это спецификация. – tripleee

+0

Язык программирования: PHP – MrJ

+0

@tripleee Спектр говорит, что он всегда будет на английском? Ну, это интересно :) – MrJ

Смежные вопросы