2012-03-04 2 views

답변

3

어느 정도의 전원 솔루션 :

function validate($str) 
{ 
    preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})$/', $str, $matches); 

    if (count($matches) != 7) 
     return false; 

    $valid_year = range(2000, 2050); // your range 
    $valid_month = range(1, 12); 
    $valid_day = range(1, 31); 
    $valid_hour = range(0, 24); 
    $valid_minute = range(0, 59); 
    $valid_second = range(0, 59); 

    list($str, $year, $month, $day, $hour, $minute, $second) = $matches; 

    foreach(array('year', 'month', 'day', 'hour', 'minute', 'second') as $part) 
    { 
     if (!in_array($$part, ${'valid_'.$part})) 
      return false; 
    } 

    return checkdate($month, $day, $year); // this will reject absurd values like February 30 or April 31 
} 

편집 : 나는 strtotime를 신뢰하지 않습니다. 예를 들면 다음과 같습니다. "타임 스탬프의 유효 범위는 일반적으로 1901 년 12 월 13 일 20:45:54 UTC에서 2038 년 1 월 19 일 03:14:07 UTC까지입니다." (strtotime 매뉴얼 페이지에서 인용). 이 범위 밖의 날짜를 허용하려면 어떻게합니까? 나에게, strtotime은 알 수없는 블랙 박스입니다. 나를 잘못 이해하지 마라 : 나는 결국 그것을 사용한다! 하지만 나는이 사건을지지하지 않을 것이다.

1

주셔서 감사합니다 날짜 정규식 및 시간 정규식 사이에 문자 'T'를 넣어,이 정규식을 시도해보십시오

(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}) 
+0

이것은 '1234-56-78T90 : 98 : 76'과 같은 것을 허용하므로 첫 번째 단계입니다. –

+0

감사합니다. 검증의 다른 부분은 그렇게 문제가되지 않습니다. –

1
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$ 

이가 올바른 형식입니다 보장합니다. 그런 다음 유효한 datetime이되도록 strtotime과 같은 함수를 호출해야합니다.

1

사람들/응용 프로그램이 시스템의 로켈에 따라 다른 형식으로 입력 된 날짜 문자열을 가질 수 있으므로 실제로는 필요하지 않다고 생각합니다.

가장 좋은 방법은 주어진 날짜에서 UNIX_TIMESTAMP를 가져 와서 유효한지 확인하는 것입니다.

예 :

$date1 = "2011-02-23T13:04:41"; 
$date2 = str_replace("T", " ", $date1); // removing the T 
$date3 = strtotime($date2); 

지금 방금 확인하고 그 다음 원래 입력 한 날짜는 물론이고, 유효한의 또는 당신의 필요 조건을 충족하는 경우 $ date3 ..와 함께 작동합니다. 시간 값이 유효한 날짜를 나타내는 경우

(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}) // pseudo - not tested 
1

이 확인 :

$t = strtotime($yourTimeString); 

if ($t === FALSE) { 
    // $yourTimeString is not valid. 
} 

을 당신이를 확인하려면

그냥 경우에 당신은 함께 일반 이동이 모든 혼란을 필요로하지 않습니다 문자열 형식 자체, 정규식 검사를 사용하십시오.

+0

T 편지는 어떻습니까? 그것은 그것을 인식하지 못합니다. – Juvanis

+1

이것은 OP가 유효화하려는 것 이외의 여러 다른 형식으로 날짜와 시간을 허용합니다. –

+0

@deporter 그래. http://ideone.com/ApI9Y – Tomalak

관련 문제