2010-12-02 3 views
0

У меня есть textarea, где пользователи вводят данные, я хочу извлечь год из текстового поля. Проблема заключается в том, что пользователи вводят год по-разному.Как извлечь год с помощью preg_match

некоторые пользователи вводят даты как 1999 или '99 или september 99. как я могу использовать одну строку регулярного выражения для извлечения года.

+1

... и они не являются случайно также входящей дни и месяцы в том же `textarea`? – 2010-12-02 13:01:00

+0

@tim Нет дней наверняка. Хотя некоторые используют месяцы как sep'99 или сентябрь 99 года. – 2010-12-02 13:08:06

ответ

2

Это должно работать для извлечения указанных дат текст:

preg_match_all('/(^|\s+)(\d{4}|\'\d{2}|(january|february|march|april|may|june|july|august|september|october|november|december) \d{2})(\s+|$)/i', $text, $matches); 

Это пришло мне в голову, тоже (это дает пользователю немного больше свободы):

preg_match_all('/(^|\s+)((january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)?(\s|\s?\')(\d{2}|\d{4}))(\s+|$)/i', $text, $matches); 

Все вышеперечисленное будет легче, когда анализируется с несколькими выражениями. Зачем вам нужен один?

Если вы просто хотите разобрать строку, которая содержит ничего, кроме этого, вы должны использовать PHP strtotime()-function.

0
\b\d\d(?:\d\d)?\b 

будет соответствовать двух- или четырехзначному номеру. Поэтому, если ваша строка содержит только цифры года, этого должно быть достаточно.

if (preg_match('/\b\d\d(?:\d\d)?\b/', $subject, $regs)) { 
    $result = $regs[0]; 
} 
0

Вы можете попробовать использовать strtotime:

StrToTime - Разбирают о любом английском текстовом описании даты и времени в метку времени Unix

date('Y', strtotime($userinput)); 
0

Извлечение только цифры из вашей строки:

/\b(\d+)\b/ 
Смежные вопросы