標準 MD5 輸出為 32 位十六進制字符,僅包含小寫字母 a-f 和數字 0-9。驗證一個字符串是否符合 MD5 格式,核心是檢查長度與字符集。
function is_md5($str) {
return (bool)preg_match('/^[a-f0-9]{32}$/i', $str);
}
^ / $:匹配字符串開始與結束,確保全串符合。[a-f0-9]:允許字符範圍(i 修飾符忽略大小寫)。{32}:精確長度 32 位。$tests = [
'e10adc3949ba59abbe56e057f20f883e', // 合法
'E10ADC3949BA59ABBE56E057F20F883E', // 合法(大寫)
'e10adc3949ba59abbe56e057f20f883', // 非法:31 位
'e10adc3949ba59abbe56e057f20f883g', // 非法:含 g
'not-a-hash', // 非法
];
foreach ($tests as $t) {
echo $t . ' => ' . (is_md5($t) ? '✓' : '✗') . PHP_EOL;
}
function is_hash($str, $algo = 'md5') {
$lengths = [
'md5' => 32,
'sha1' => 40,
'sha256' => 64,
'sha512' => 128,
];
$len = $lengths[$algo] ?? 32;
return (bool)preg_match("/^[a-f0-9]{{$len}}$/i", $str);
}
// 用法
is_hash('...', 'sha256');
strtolower() 統一。