I can't tell if you're using ereg or preg functions, so I'll just say that the preg syntax is covered in the PHP manual while the ereg syntax is (as noted in the manual) in the POSIX regexp manpages (which, if you're on a Windows system, are bundled with PHP).
Both note the necessity of positioning hyphens specially because of the fact that they're used in indicate character ranges (such as A-Z).
[0-9a-z.-_]
Would mean "any character in the ranges 0 to 9, a to z, or . to _". In other words, any of the characters
./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]_abcdefghijklmnopqrstuvwxyz
Be aware, that ".museum" is a valid top-level domain, so you may want to go to {2,6}