2010-12-02 3 views
0

사용자가 세부 정보를 입력하는 텍스트 영역이 있습니다. 텍스트 영역에서 연도를 추출하고 싶습니다. 문제는 사용자가 다른 방법으로 연도를 입력한다는 것입니다.preg_match를 사용하여 연도를 추출하는 방법

일부 사용자는 1999 또는 '99 또는 september 99과 같이 날짜를 입력합니다. 단일 정규식 문자열을 사용하여 연도를 추출하는 방법은 무엇입니까?

+1

... 그들은 같은'textarea'에 날짜와 달을 입력 혹시 않나요? –

+0

@tim 확실하지 않습니다. 어떤 사람들은 sep'99 또는 september '99로 달을 사용하는 반면. –

+3

이것은 질문의 접선이지만 정보가 입력 될 때 정보가 혼동 될 가능성이있는 경우 문제는 ** 잘못된 사용자 인터페이스 디자인 **입니다. 연도 지정이 모호하지 않도록 입력 방법을 변경해야합니다. –

답변

2

이 언급 된 날짜를 추출하는 작업을해야 유닉스 타임 스탬프로 영어 텍스트 날짜 설명에 대해 구문 분석 만료시 :

이 (10) 내 마음에 와서도 (이 사용자에게 좀 더 자유를 제공합니다)의

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을 사용해야합니다. 당신의 문자열에서

+1

+1 정확히 스펙을 따르는 솔루션. 확실히 사양은 불완전하다 :) 헤이, 나는 2 월 99에 들어갔다! 작동하지 않습니다! –

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

은 2 자리 또는 4 자리 숫자와 일치합니다. 따라서 문자열에 연도 번호 만 있으면 충분합니다.

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

당신은 strtotime 사용하려고 할 수 있습니다

한 strtotime이 -

date('Y', strtotime($userinput)); 
0
[. -]((?:\d\d|')\d\d)$ 
0

추출 숫자 만 :

/\b(\d+)\b/ 
관련 문제