UAX31 implementation.. Good for us because we support all the scripts for all the languages we have projects in. Our best practice has it that people can have a user in their own language.
The UAX31 standard defines the standard rules for our best practice. Writing a reference implementation that will actually be used is a bit different; the Wikimedia Foundation implemented a black list of names for instance.
Once you start writing an implementation, you encounter all the ambiguities, all the issues that are still open. How for instance do you cope with the Arabic script, what to do with a "." or a full stop in the middle of a user?
It makes sense to allow for the characters that are used in a language. This implies that knowing what language to expect is crucial. There are two obvious approaches; you expect a new user in the default language or the languages is defined in the preferences.
When you are interested in this subject have a read of the current version of the code.