You use file_exists() too in matching the filename. The regexp will fail if the file doesn't exist, no need to check again.
Also [0-9]* would accept 0, 12, 123, 1234, 12345, 123456 and to infinity. I think the correct PCRE syntax is [0-9]{2}, not too sure though.
if (is_numeric($_GET['id'])) {
$info = "/home/LAN/public_html/contact/staffinfo/".$_GET['id'].".html";
preg_match("[0-9]{2}\\.html$/i", $info, $matches)
or die ("Sorry, that staff ID does not exist. Please try again.");
include ($info);
}
The i modifier sets regexp to be case-insensitive. You need to escape period chars (.), $ denotes end of string - this should help avoid filenames like file.html.html (not that that's very likely). Also some people say that negating entire function calls is bad programming. I don't know why though 😉
hth