Thực sự không có cách nào phù hợp để xác thực trường ngày, tất cả những gì bạn có thể làm là tách nó ra và kiểm tra nó theo từng phần ..
Có checkdate()
, nhưng như đã đề cập trong các bình luận trên trang tài liệu, nó không thể được sử dụng như một phương tiện hiệu quả để vệ sinh đầu vào ngày ..
Điều đầu tiên tôi thường kiểm tra là loại dữ liệu, nếu mong đợi một chuỗi thì truyền thành một chuỗi và tương tự cho các giá trị số nguyên và mảng.
// Casting example
$string = (string) $string;
$num = (int) $num;
$array = (array) $array;
Đối với các trường ngày bạn thường có một phần tách biệt giữa mỗi phần của ngày, hãy phân chia dựa trên đó và phân chia các phần (tuy nhiên nhiều bạn mong đợi) dưới dạng số nguyên.
$date = explode( '/', (string) $string );
$date = array_map( 'intval', $date );
// Now count the parts and validate them further - eg. you don't want negative values
Tất nhiên, điều này thực sự phụ thuộc vào cách bạn lưu trữ ngày tháng và những gì bạn mong đợi trong lĩnh vực đó, đó là thứ bạn sẽ phải vệ sinh phù hợp theo nhu cầu cụ thể của mình.
Giá trị số khá dễ dàng, lần đầu tiên chuyển sang int ..
$num = (int) $var_with_num;
// Or
$num = absint( $var_with_expected_non_negative_num ); // absint is a WordPress function
Sau đó kiểm tra nó trong phạm vi nhất định của bạn (theo câu hỏi của bạn).
// If it's not in range
if( $num < 100 || $num > 500 ) {
// Number is not in range
}
hoặc là..
// If it is in range - including 100 & 500 as possible values
if( $num >= 100 && $num <= 500 ) {
// Number is in range
}
Kiểm tra xem một chuỗi có độ dài cụ thể có dễ không, rất dễ trong thực tế tôi sẽ liên kết bạn với tài liệu PHP cho strlen.
http://php.net/manual/en/feft.strlen.php
Theo tôi, các giá trị ngày là khó nhất, nhưng thực sự đó là trường hợp viết mã của bạn để phù hợp với những gì bạn mong đợi từ trường đó. Nếu bạn có một trường có định dạng ngày D/M/Y
chẳng hạn, bạn biết rằng /
(dấu gạch chéo chuyển tiếp) sẽ (nên) xuất hiện và việc phân tách trên dấu phân cách đó sẽ cung cấp cho bạn một mảng gồm 3 giá trị số ... (nếu phần tách không ' t cung cấp cho bạn 3 giá trị hoặc bất kỳ giá trị số không hợp lệ nào, sau đó dữ liệu không hợp lệ) ..
Hy vọng điều đó sẽ giúp .. (và tôi sẵn sàng phê bình nếu có ai có phương pháp tốt hơn cho bất kỳ điều nào ở trên).