2012-02-15 29 views
7

Ai đó có thể chỉ cho tôi lỗi cách của tôi khi nói đến biểu thức chính quy này:Regular Expression Trợ giúp cho ngày Validation - dd/mm/yyyy - PHP

if(preg_match("/^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$/", $_POST["date"]) === 0) { 
    echo 'error'; 
} 

Về cơ bản tôi muốn điều này để hiển thị một thông báo lỗi mỗi lần - trừ khi định dạng đúng (dd/mm/yyyy).

Tôi đang làm gì sai với những điều trên?

Rất cám ơn mọi con trỏ.

- regex được cập nhật ở trên không lâu sau khi công bố - xin lỗi về sự bất tiện -

+1

Sử dụng một trực tuyến regexp thử ex. http://www.regexpal.com/ – betontalpfa

Trả lời

15

Tôi nghĩ bạn nên thoát khỏi dấu gạch chéo /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/

+0

Rất cám ơn vì điều này. Tôi sẽ đánh dấu màu xanh lá cây ngay :) – michaelmcgurk

+0

cảm ơn bạn. công việc này cho tôi cũng vậy. Đã bỏ phiếu cho bạn. –

4

Bạn cần phải thoát khỏi dấu gạch chéo kể từ khi bạn đang sử dụng nó như delimiter regex

/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/ 

hoặc sử dụng regex khác nhau delimiters

#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$# 
+0

Tuyệt vời. Điều đó bây giờ hoạt động hoàn hảo. Silly me :) – michaelmcgurk

4

Bạn cũng có thể sử dụng một:

([0-2]\d|3[0-1])\/(0\d|1[0-2])\/(19|20)\d{2} 

nếu bạn muốn phân biệt giữa ngày và tháng, nhưng cũng xác nhận chỉ có 2 thế kỷ.

+0

Và nếu bạn cần chụp '^ ([0-2] \ d | 3 [0-1]) \/(0 \ d | 1 [0-2]) \/((?: 19 | 20) \ d {2}) $ 'và cũng đã thêm đầu và kết thúc neo. Ngoài ra còn có một lỗi mà ngày không có ngày và tháng sẽ làm việc '00/00/1999 '. –

2

Tôi sử dụng này để kiểm tra ngày

private function validate_date($date, $empty_allowed = true) { 

    if (empty($date)) { 
     return $empty_allowed; 
    } 

    if (! strpos($date, '/')) { 
     return false; 
    } 

    if (substr_count($date, '/') !== 2) { 
     return false; 
    } 

    if (preg_match('/(0[1-9]|1[0-9]|3[01])\/(0[1-9]|1[012])\/(2[0-9][0-9][0-9]|1[6-9][0-9][0-9])/', $date) !== 1) { 
     return false; 
    } 

    $split = explode('/', $date); 

    return checkdate($split[1], $split[0], $split[2]); 

} 
Các vấn đề liên quan