This question came from a post I responded to and got me thinking that this was something that may be required at times, so I came up with the model in this blog. It may have other application as well as the Text Box example.
Firstly do a Collection of all special characters (you can do this at ScreenOnVisible) by using their ASCII value ranges
this puts 31 Special Characters into the collection under the fieldFieldNo. There may be some you want to allow such as underscore _ (95) so you would have to adjust the below to suit. Below is a gallery (with wrap at 4) showing the characters