有些資料雖然不是空白,但內容本身可能不符合欄位應有的格式。例如年齡應該是數字,卻出現abc;性別應該統一使用固定格式,卻出現不同的寫法。
因此今天讓PHP根據不同欄位設定的規則,自動找出這些問題。
一、檢查年齡是否為數字
在測試資料中,P003 的年齡被故意設定成:
P003,abc,男性,172,68,120/80,75,家醫科,2026-09-02
正常情況下age應該是數字,因此使用PHP的is_numeric()來判斷。
if (!is_numeric($row[1])) {
echo '格式錯誤:' . $row[0] . ' → age = ' . $row[1] . '<br>';
}
其中$row[1]是age欄位。
如果不是數字,就顯示錯誤資訊。
最後可以找到:格式錯誤:P003 → age = abc
二、檢查性別格式
接著檢查 gender。為了讓資料格式統一,這次先設定性別只接受:男、女
但是測試資料中有:
P003 → 男性
P004 → M
因此使用:
if ($row[2] !== '' && $row[2] !== '男' && $row[2] !== '女') {
echo '格式錯誤:' . $row[0] . ' → gender = ' . $row[2] . '<br>';
}
這樣就能找出:
格式錯誤:P003 → gender = 男性
格式錯誤:P004 → gender = M
這裡特別加入:$row[2] !== ''
是因為空白資料已經在Day7的「缺失值檢查」處理。
也就是把以下兩種問題分開這樣會比較清楚:
空白 → 缺失值
有內容但格式不符合 → 格式錯誤
三、檢查日期格式
這次設定日期格式為:YYYY-MM-DD
例如:2026-09-05
但測試資料中的 P009 使用了:2026/09/05
因此使用正規表示式檢查日期格式:
if ($row[8] !== '' && !preg_match('/^\d{4}-\d{2}-\d{2}$/', $row[8])) {
echo '格式錯誤:' . $row[0] . ' → visit_date = ' . $row[8] . '<br>';
}
這樣就能找出:格式錯誤:P009 → visit_date = 2026/09/05
四、目前的檢查結果
完成三種檢查後,系統可以找到:
格式錯誤:P003 → age = abc
格式錯誤:P003 → gender = 男性
格式錯誤:P004 → gender = M
格式錯誤:P009 → visit_date = 2026/09/05
格式錯誤:P009 → visit_date = 2026/09/05
其中,P009會出現兩次,是因為測試資料中目前有兩筆相同的 P009 資料。