^(\\d{1,4})([\\\/\\-\\.]\\d{1,4}){2}$<\/code><\/pre>\n\n\n\n\u0110\u00e2y l\u00e0 m\u1eabu RegEx \u0111\u01a1n gi\u1ea3n, v\u00ec ch\u00fang ta ch\u1ec9 mu\u1ed1n l\u1ecdc d\u1eef li\u1ec7u c\u00f3 k\u00fd t\u1ef1 l\u1ea1 (kh\u00f4ng bao g\u1ed3m s\u1ed1 v\u00e0 d\u1ea5u ph\u00e2n c\u00e1ch \/ ho\u1eb7c – ho\u1eb7c .)<\/p>\n\n\n\n
$laloi=array();$ll=0;\n\n$reg_laloi='\/^(\\d{1,4})([\\\/\\-\\.]\\d{1,4}){2}$\/';\n\n\/\/ b\u1ea1n ch\u00fa \u00fd c\u00e1ch \u0111\u1eb7t l\u1ec7nh regex trong PHP, n\u00f3 th\u01b0\u1eddng n\u1eb1m trong d\u1ea5u '\/\/'\n\n$kq_laloi=preg_match($reg_laloi, $ngaya);\n\n\/\/ n\u1ebfu kh\u1edbp k\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 1, n\u1ebfu kh\u00f4ng kh\u1edbp k\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 0\n\nif ($kq_laloi==0) {$laloi[$ll]=$ngaya;$ll++;} \/\/ n\u1ebfu ng\u00e0y th\u00e1ng n\u0103m c\u00f3 k\u00fd t\u1ef1 l\u1ea1 ho\u1eb7c thi\u1ebfu d\u1eef li\u1ec7u th\u00ec n\u00f3 \u0111\u01b0\u1ee3c \u0111\u01b0a v\u00e0o m\u1ea3ng $laloi \u0111\u1ec3 show ra sau n\u00e0y<\/code><\/pre>\n\n\n\nV\u1eady l\u00e0 \u0111\u1ebfn b\u01b0\u1edbc n\u00e0y ch\u00fang ta \u0111\u00e3 l\u00e0m \u0111\u01b0\u1ee3c m\u1ea5y vi\u1ec7c quan tr\u1ecdng:<\/p>\n\n\n\n
- Ph\u00e1t hi\u1ec7n d\u1eef li\u1ec7u ng\u00e0y th\u00e1ng n\u0103m c\u00f3 kho\u1ea3ng tr\u1eafng n\u1eb1m trong;<\/li>
- Ph\u00e1t hi\u1ec7n d\u1eef li\u1ec7u ng\u00e0y th\u00e1ng n\u0103m c\u00f3 k\u00fd t\u1ef1 kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p;<\/li>
- Ph\u00e1t hi\u1ec7n d\u1eef li\u1ec7u ng\u00e0y th\u00e1ng n\u0103m thi\u1ebfu d\u1eef li\u1ec7u kh\u00f4ng th\u1ec3 kh\u00f4i ph\u1ee5c \u0111\u01b0\u1ee3c;<\/li><\/ul>\n\n\n\n
B\u00e2y gi\u1edd m\u1edbi \u0111\u1ebfn b\u01b0\u1edbc ch\u00fang ta x\u00e1c \u0111\u1ecbnh d\u1eef li\u1ec7u c\u00f3 c\u1ea5u tr\u00fac nh\u01b0 th\u1ebf n\u00e0o.<\/p>\n\n\n\n
Trong ph\u1ea7n n\u00e0y, ch\u00fang ta c\u0169ng s\u1ebd d\u00f9ng bi\u1ec3u th\u1ee9c ch\u00ednh quy (RegEx), nh\u01b0ng v\u1edbi c\u1ea5u tr\u00fac ch\u1eb7t ch\u1ebd h\u01a1n nhi\u1ec1u.<\/p>\n\n\n\n
Bi\u1ec3u th\u1ee9c ch\u00ednh quy \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh c\u1ea5u tr\u00fac ng\u00e0y r\u1ed3i \u0111\u1ebfn th\u00e1ng, r\u1ed3i m\u1edbi \u0111\u1ebfn n\u0103m l\u00e0:<\/p>\n\n\n\n
^(0?[1-9]|[12]\\d|3[01])[\\\/\\-\\.](0?[1-9]|1[012])[\\\/\\-\\.](\\d{2}|\\d{4})$<\/code><\/pre>\n\n\n\n- Chu\u1ed7i s\u1ed1 \u0111\u1ea7u ti\u00ean s\u1ebd ch\u1ec9 n\u1eb1m trong kho\u1ea3ng t\u1eeb 01 \u0111\u1ebfn 31 (ho\u1eb7c 1, 2, 3,.., 9, kh\u00f4ng b\u1eaft bu\u1ed9c ph\u1ea3i c\u00f3 s\u1ed1 0 \u0111\u1eb1ng tr\u01b0\u1edbc v\u1edbi nh\u1eefng s\u1ed1 d\u01b0\u1edbi 10), chu\u1ed7i th\u1ee9 hai ch\u1ec9 n\u1eb1m trong trong t\u1eeb 01 (ho\u1eb7c 1, kh\u00f4ng b\u1eaft bu\u1ed9c ph\u1ea3i c\u00f3 s\u1ed1 0 \u0111\u1eb1ng tr\u01b0\u1edbc v\u1edbi nh\u1eefng s\u1ed1 d\u01b0\u1edbi 10) \u0111\u1ebfn 12. C\u00f2n cu\u1ed1i c\u00f9ng l\u00e0 n\u0103m v\u1edbi gi\u00e1 tr\u1ecb l\u00e0 2 s\u1ed1 (v\u00ed d\u1ee5 87 ho\u1eb7c 15) hay 4 s\u1ed1 (v\u00ed 1987 ho\u1eb7c 2015);<\/li>
- \u0110\u00e2y l\u00e0 c\u1ea5u tr\u00fac nhi\u1ec1u kh\u1ea3 n\u0103ng nh\u1ea5t s\u1ebd x\u1ea3y ra trong h\u1ea7u h\u1ebft tr\u01b0\u1eddng h\u1ee3p;<\/li><\/ul>\n\n\n\n
C\u00e2u l\u1ec7nh c\u1ee5 th\u1ec3 s\u1ebd nh\u01b0 sau:<\/p>\n\n\n\n
$dem_ntnc=0; \/\/ d\u00f9ng \u0111\u1ec3 \u0111\u1ebfm xem c\u00f3 bao nhi\u00eau d\u1eef li\u1ec7u \u0111\u1ea1t chu\u1ea9n\n$reg_ntnc='\/^(0?[1-9]|[12]\\d|3[01])[\\\/\\-\\.](0?[1-9]|1[012])[\\\/\\-\\.](\\d{2}|\\d{4})$\/';\n$kq_ntnc=preg_match($reg_ntnc, $ngaya);\nif ($kq_ntnc) {$dem_ntnc++;}<\/code><\/pre>\n\n\n\nGi\u00e1 tr\u1ecb $dem_ntnc<\/code> s\u1ebd cho b\u1ea1n bi\u1ebft trong d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n c\u00f3 bao nhi\u00eau d\u1eef li\u1ec7u \u0111\u00fang chu\u1ea9n ng\u00e0y\/th\u00e1ng\/n\u0103m (d\u1ea5u \/ c\u00f3 th\u1ec3 l\u00e0 – ho\u1eb7c .)<\/p>\n\n\n\nChia con s\u1ed1 \u0111\u1ea5y cho h\u00e0ng d\u1eef li\u1ec7u, b\u1ea1n c\u00f3 th\u1ec3 \u01b0\u1edbc t\u00ednh \u0111\u01b0\u1ee3c t\u1ef7 l\u1ec7 th\u1ed1ng nh\u1ea5t d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n. N\u1ebfu d\u1eef li\u1ec7u thu th\u1eadp c\u00f3 ngu\u1ed3n \u0111\u1ee7 t\u1ed1t, con s\u1ed1 n\u00e0y th\u01b0\u1eddng l\u1edbn h\u01a1n 99%.<\/p>\n\n\n\n
\u0110o\u1ea1n m\u00e3 ho\u00e0n ch\u1ec9nh \u0111\u1ec3 ki\u1ec3m tra:<\/p>\n\n\n\n
<?php\nfunction kiem_tra_ngaythang_v2($ten_bang,$ngay){ \/\/ \u0111\u1ec3 ki\u1ec3m tra d\u1eef li\u1ec7u ng\u00e0y th\u00e1ng \u0111ang c\u00f3 c\u1ea5u tr\u00fac nh\u01b0 th\u1ebf n\u00e0o?\nrequire 'database.php';\n$query3=\"SELECT ngay FROM $ten_bang\";\n$result3=$db->query($query3);\n\n$kdl=0;\/\/\u0111\u1ebfm d\u1eef li\u1ec7u NULL\n$ktrang=array(); $j=0; \/\/ \u0111\u1ebfm v\u00e0 l\u01b0u d\u1eef li\u1ec7u c\u00f3 kho\u1ea3ng tr\u1eafng \u1edf gi\u1eefa\n$laloi=array();$ll=0; \/\/ \u0111\u1ebfm v\u00e0 l\u01b0u d\u1eef li\u1ec7u l\u1ed7i\n$dem_ntnc=0; \/\/ \u0110\u1ebfm s\u1ed1 d\u1eef li\u1ec7u \u0111\u1ea1t ti\u00eau chu\u1ea9n ng\u00e0y\/th\u00e1ng\/n\u0103m\n$dem_tnnc=0; \/\/ \u0110\u1ebfm s\u1ed1 d\u1eef li\u1ec7u \u0111\u1ea1t ti\u00eau chu\u1ea9n th\u00e1ng\/ng\u00e0y\/n\u0103m\n$tong_ban_ghi=0;\/\/T\u1ed5ng s\u1ed1 h\u00e0ng d\u1eef li\u1ec7u\n foreach ($result3 as $value3) {\n $tong_ban_ghi++;\n $ntn_goc=$value3[$ngay]; \/\/ \u0111\u00e2y l\u00e0 th\u00f4ng tin ng\u00e0y th\u00e1ng n\u0103m g\u1ed1c l\u1ea5y t\u1eeb b\u1ea3ng\n $ngaya= trim($ntn_goc, ' '); \/\/ lo\u1ea1i b\u1ecf kho\u1ea3ng tr\u1eafng tr\u01b0\u1edbc v\u00e0 sau chu\u1ed7i ng\u00e0y th\u00e1ng n\u0103m sinh\n \n if ($ngaya==NULL || $ngaya == \"\") {$kdl++;} else {\n \n $cokt=substr_count($ngaya, ' ');\n if ($cokt) {$ktrang[$j]=$ngaya; $j++;} else {\n \n $reg_laloi='\/^(\\d{1,4})([\\\/\\-\\.]\\d{1,4}){2}$\/';\n $kq_laloi=preg_match($reg_laloi, $ngaya);\n \n \/\/ n\u1ebfu ng\u00e0y th\u00e1ng n\u0103m c\u00f3 k\u00fd t\u1ef1 l\u1ea1 ho\u1eb7c thi\u1ebfu d\u1eef li\u1ec7u th\u00ec n\u00f3 \u0111\u01b0\u1ee3c \u0111\u01b0a v\u00e0o m\u1ea3ng $laloi \u0111\u1ec3 show ra sau n\u00e0y\n if ($kq_laloi==0) {$laloi[$ll]=$ngaya;$ll++;}\n \n }\n \n }\n \/\/ ki\u1ec3m tra kh\u1edbp v\u1edbi ki\u1ec3u d\u1eef li\u1ec7u ng\u00e0y th\u00e1ng n\u0103m\n $reg_ntnc='\/^(0?[1-9]|[12]\\d|3[01])[\\\/\\-\\.](0?[1-9]|1[012])[\\\/\\-\\.](\\d{2}|\\d{4})$\/';\n $kq_ntnc=preg_match($reg_ntnc, $ngaya);\n if ($kq_ntnc) {$dem_ntnc++;}\n \n \/\/ ki\u1ec3m tra kh\u1edbp v\u1edbi ki\u1ec3u d\u1eef li\u1ec7u th\u00e1ng ng\u00e0y n\u0103m\n $reg_tnnc='\/^(0?[1-9]|1[012])[\\\/\\-\\.](0?[1-9]|[12]\\d|3[01])[\\\/\\-\\.](\\d{2}|\\d{4})$\/';\n $kq_tnnc=preg_match($reg_tnnc, $ngaya);\n if ($kq_tnnc) {$dem_tnnc++;}\n } \n\n$kq_ktrang=\"\"; \n$sl_ktrang=count($ktrang);\nif($sl_ktrang>0) {foreach ($ktrang as $ch_ktrang) {$kq_ktrang=$kq_ktrang.$ch_ktrang.\"<\/br>\";}}\n\n$in_laloi=\"\";\n$sl_laloi=count($laloi);\nif($sl_laloi>0) {foreach ($laloi as $ch_laloi) {$in_laloi=$in_laloi.$ch_laloi.\"<\/br>\";}}\n\n$tyle=($dem_ntnc\/$tong_ban_ghi)*100;\n$kq_tyle=$tyle.'%';\n$tong_dll=$tong_ban_ghi-$dem_ntnc; \/\/ t\u1ed5ng d\u1eef li\u1ec7u l\u1ed7i\n\n$giadinh=($dem_tnnc\/$tong_ban_ghi)*100;\n$kq_giadinh=$giadinh.'%';\n\n$kq1=\"S\u1ed1 l\u01b0\u1ee3ng d\u1eef li\u1ec7u NULL ho\u1eb7c R\u1ed6NG: \".$kdl.\"<\/br>\";\n$kq2=\"S\u1ed1 l\u01b0\u1ee3ng d\u1eef li\u1ec7u c\u00f3 kho\u1ea3ng tr\u1eafng trong ng\u00e0y th\u00e1ng (hi\u1ebfm g\u1eb7p): \".$sl_ktrang.\"<\/br>\".\"C\u00e1c m\u1eabu (n\u1ebfu c\u00f3): \".\"<\/br>\".$kq_ktrang.\"<\/br>\".\"<\/br>\";\n$kq3=\"S\u1ed1 l\u01b0\u1ee3ng d\u1eef li\u1ec7u c\u00f3 k\u00fd t\u1ef1 l\u1ea1 ho\u1eb7c thi\u1ebfu d\u1eef li\u1ec7u kh\u00f4ng kh\u00f4i ph\u1ee5c \u0111\u01b0\u1ee3c: \".$sl_laloi.\"<\/br>\".\"C\u00e1c m\u1eabu (n\u1ebfu c\u00f3): \".\"<\/br>\".$in_laloi.\"<\/br>\".\"<\/br>\";\n$kq4=\"T\u1ef7 l\u1ec7 d\u1eef li\u1ec7u c\u00f3 c\u1ea5u tr\u00fac ng\u00e0y\/th\u00e1ng\/n\u0103m ti\u00eau chu\u1ea9n: \".$kq_tyle.\"<\/br>\";\n$kq5=\"T\u1ed5ng s\u1ed1 d\u1eef li\u1ec7u kh\u00e1c c\u1ea5u tr\u00fac ti\u00eau chu\u1ea9n l\u00e0: \".$tong_dll.\"<\/br>\";\n$kq6=\"Gi\u1ea3 \u0111\u1ecbnh d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n l\u00e0 th\u00e1ng\/ng\u00e0y\/n\u0103m th\u00ec t\u1ec9 l\u1ec7 s\u1ebd l\u00e0: \".$kq_giadinh.\"<\/br>\";\n\/\/ ng\u00e0y th\u00e1ng n\u0103m ti\u00eau chu\u1ea9n l\u00e0 c\u00f3 c\u1ea5u tr\u00fac ng\u00e0y tr\u01b0\u1edbc th\u00e1ng r\u1ed3i cu\u1ed1i l\u00e0 n\u0103m, d\u1ea5u ph\u00e2n c\u00e1ch c\u00f3 th\u1ec3 l\u00e0\n\/\/ d\u1ea5u g\u1ea1ch xu\u00f4i \/ ho\u1eb7c d\u1ea5u g\u1ea1ch ngang - ho\u1eb7c d\u1ea5u .\n\/\/ ng\u00e0y c\u00f3 th\u1ec3 l\u00e0 1 s\u1ed1 ho\u1eb7c 2 s\u1ed1, c\u00f3 th\u1ec3 c\u00f3 s\u1ed1 0 \u0111\u1eb1ng tr\u01b0\u1edbc n\u1ebfu d\u01b0\u1edbi 10, ng\u00e0y n\u1eb1m trong kho\u1ea3ng t\u1eeb 1 \u0111\u1ebfn 31\n\/\/ th\u00e1ng c\u00f3 th\u1ec3 l\u00e0 1 s\u1ed1 ho\u1eb7c 2 s\u1ed1, c\u00f3 th\u1ec3 c\u00f3 s\u1ed1 0 \u0111\u1eb1ng tr\u01b0\u1edbc n\u1ebfu d\u01b0\u1edbi 10, th\u00e1ng ch\u1ec9 n\u1eb1m trong kho\u1ea3ng t\u1eeb 1 \u0111\u1ebfn 12\n\/\/ n\u0103m c\u00f3 th\u1ec3 l\u00e0 s\u1ed1 c\u00f3 2 ch\u1eef s\u1ed1 ho\u1eb7c 4 ch\u1eef s\u1ed1\n\/\/ d\u00f9 d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n l\u00e0 ng\u00e0y\/th\u00e1ng\/n\u0103m chu\u1ea9n th\u00ec nh\u1eefng ng\u00e0y nh\u01b0 05\/07\/2015 th\u00ec gi\u1ea3 \u0111\u1ecbnh th\u00e1ng \u0111\u1ee9ng tr\u01b0\u1edbc v\u1eabn h\u1ee3p l\u1ec7 theo c\u00e1ch ki\u1ec3m tra\n\/\/ do v\u1eady th\u1ef1c t\u1ebf d\u1eef li\u1ec7u r\u1ea5t quan tr\u1ecdng, th\u01b0\u1eddng nh\u1eefng d\u1eef li\u1ec7u l\u1ea5y t\u1eeb c\u00f9ng m\u1ed9t ngu\u1ed3n s\u1ebd c\u00f3 c\u1ea5u tr\u00fac gi\u1ed1ng nhau\n$kq=$kq1.$kq2.$kq3.$kq4.$kq5.$kq6;\nreturn $kq;\n}\necho kiem_tra_ngaythang_v2(\"ten_bang_du_lieu\",\"ten_cot_ngay\");\n\/\/ b\u1ea1n thay th\u1ebf ten_bang_du_lieu b\u00e0ng t\u00ean b\u1ea3ng d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n (kh\u00f4ng ph\u1ea3i t\u00ean database)\n\/\/ b\u1ea1n thay th\u1ebf ten_cot_ngay b\u1eb1ng t\u00ean c\u1ee7a c\u1ed9t ng\u00e0y th\u00e1ng trong b\u1ea3ng d\u1eef li\u1ec7u m\u00e0 b\u1ea1n c\u1ea7n ki\u1ec3m tra\n\n<\/code><\/pre>\n\n\n\nV\u00ed d\u1ee5 v\u1ec1 m\u1ed9t k\u1ebft qu\u1ea3 m\u00e0 t\u00f4i ki\u1ec3m tra v\u1edbi g\u1ea7n 40 ng\u00e0n h\u00e0ng d\u1eef li\u1ec7u:<\/p>\n\n\n\n