General responses:

Don't use isincs when checking a single character, use === which does a case sensitive comparison, that should be faster.

Definately don't use regex when regex is not necessary. For trivial processing regex doesn't fair as well as regular character processing. It is designed for more complex things. A small regex like is necessary here is wasteful both in speed and in memory usage.

Lastly, about escaping characters in character classes, Racoon is right (almost) you don't need escaping, except for one character, ]. If you simply had [a-z]] That (by most regex libs, PCRE included) is interpreted as the character class a-z followed by the literal character ]. You would need to do [a-z\]] to make it know that the ] is part of the character class and not the metacharacter to represent the end of the character class. Also you could use it on a -, [a\-z] means a,-, or z rather than a-z, but the more common syntax is simply to do [az-] since the - is at the end it is assumed to be a literal hyphen and not representing a set of characters.