If you only consider ASCII specialchars, you can simply enumerate them in a character class: /\A[!-\/:-@\[-`\{-~]*\z/ This matches any string that is empty or consists only of the characters !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ However, since this regex is hard to read and requires knowledge of the ASCII table, it's probably better to use the POSIX classes mentioned by Brian or property classes (\p{} syntax): /\A[\p{ASCII}&&\p{Graph}&&\p{^Alnum}]*\z/ The "&&" means intersection and the "^" means negations. That is, you're selecting all ASCII characters which are visible (Graph property), but not alphanumeric. See http://www.ruby-doc.org/core-1.9.3/Regexp.html for explanations of the syntax. -- Posted via http://www.ruby-forum.com/.