I know that some characters appear to be invalid, such as a period ("."). Is there a list of valid or invalid characters for a JID?
Here you will find a list of characters that have to be escaped:
method JID.escapeNode()
I would say you can use everything you can use as email address.
All “normal” charaters, digits, the dot (".") and minus ("-"). Maybe plus ("+") und sharp ("#"). Everything else should be escaped.
Coolcat