What is the best way to communicate to a User which characters are allowable in a Form?

If space wasn't an issue, then you could write a book to eliminate ambiguity. However that is rarely the case!

Here are some different Error messages all trying to susinctly communicate the same thing...
$errors['username'] = 'Username must be 8-30 characters (A-Z0-9_- )';

$errors['username'] = 'Username can only use Letters, Numbers, Underscore, Hyphen, Period.';

$errors['username'] = 'Username can only use: a-z A-Z 0-9 _ - .';

$errors['username'] = 'Invalid Username. (see valid characters)';
The last one could take them to a page with LARGE FONT spelling things out.

As a developer, I think #1 is the best, however it may not be intuitive to your average person.

As Jane User, #2 is the clearest, but it also is really l--o--n--g, and if you had 8-10 special characters you allowed, then you would have wrapping issues!!

Anyways, what do you think?!