2012-01-06 3 views
0

사용자가 다음 형식으로 날짜를 입력 할 수 있도록 텍스트 입력 상자가 1 개 있습니다 (월, 날짜 및 연도에 별도의 입력란 3 개를 사용하지 않으려 고합니다) :날짜가 포함 된 유효한 형식 preg_match를 사용하여

mm/dd/yyyy (could be a single digit m/d/yyyy) 

또는 난 후 사용자가 상기 포맷에 따른 값을 입력 한 경우는 preg_match 확인을 사용할

mm-dd-yyyy (single digit m-d-yyyy) 

. 그렇다면, 나는 달과 해를 추출하고 (substr을 사용하여) 유효한 날짜를 확인하고 윤년인지 알 수 있고 9 월 31 일 같은 실수를 막기 위해 PHP 함수 checkdate()를 사용합니다 ...

바라 건데, 난 아무것도없는 아니에요 ...

지금, 메신저는 사용자가

이 위에 표시된 형식에 따라 유효한 날짜를 입력했는지 확인 preg_match를 사용하는 방법을 알아 내려고 노력에 갇혀 내가 생각해 낸 건 ... ???

preg_match(d{2})(\d{2})(\d{4}) 

추출 달, 일 년이 (나에게 좋아 보이는) : 마지막으로

$date = trim($_POST['date']); 
$month = substr($date, 0, 2); 
$day = substr($date, 3, 2); 
$year = substr($date, 6, 4); 

과 날짜가 유효한지 확인 (나에게 좋아 보이는) :

checkdate($month, $day, $year); 

감사합니다.

+0

이미'checkdate'가 있다면 regexps를 사용해야하는 이유는 무엇입니까? – zerkms

+0

ok, regexps가 필요하지 않습니다 ... 사용자가 2/2/1974를 입력하면 어떻게 월, 일 및 연도를 추출합니까? – Marco

+0

'explode ('/', $ str) ' – zerkms

답변

1

다음과 같이 사용할 수 있습니다.

if (preg_match("#^(\d{1,2})\D(\d{1,2})\D(\d{2,4})$", trim($date), $match) 
     and checkdate($match[2], $match[1], $match[3])) { 
    $timestamp = mktime(0, 0, 0, $match[2], $match[1], $match[3]); 
    echo "Date is valid"; 
} else 
    echo "Invalid date"; 

여기에서 볼 수있는 유일한 문제는에서 2012 년을 추측 할 것으로 예상하는 06.01.12와 같은 내용을 사용자가 입력하는 경우입니다. 시작 부분에 "20"을 추가 할 수는 없습니다. 왜냐하면 다른 사용자가 15.11.99와 같은 것을 입력 할 수 있기 때문입니다. 이것은 정확한 날짜 형식을 강제하는 javascript 기반 달력을 가진 readonly 필드로 해결할 수 있습니다. 그러면 regexp를 사용하지 않고 간단히 explode("-", $date)을 사용할 수 있습니다.

관련 문제