255) { return false; } // Check the local address // We're a bit more conservative about what constitutes a "legal" address, that is, A-Za-z0-9!#$%&\'*+/=?^_`{|}~- $allowed = 'A-Za-z0-9!#&*+=?_-'; $regex = "/^[$allowed][\.$allowed]{0,63}$/"; if ( ! preg_match($regex, $local) ) { return false; } // No problem if the domain looks like an IP address, ish $regex = '/^[0-9\.]+$/'; if ( preg_match($regex, $domain)) { return true; } // Check Lengths $localLen = strlen($local); if ($localLen < 1 || $localLen > 64) { return false; } // Check the domain $domain_array = explode(".", rtrim( $domain, '.' )); $regex = '/^[A-Za-z0-9-]{0,63}$/'; foreach ($domain_array as $domain ) { // Must be something if ( ! $domain ) { return false; } // Check for invalid characters if ( ! preg_match($regex, $domain) ) { return false; } // Check for a dash at the beginning of the domain if ( strpos($domain, '-' ) === 0 ) { return false; } // Check for a dash at the end of the domain $length = strlen($domain) -1; if ( strpos($domain, '-', $length ) === $length ) { return false; } } return true; } }