sicuramente è più efficiente se gli dici quali caratteri sono ammessi!

nel codice hai sbagliato tu perchè questi caratteri: $()'^ vanno preceduti da \ come carattere di escape.

ciao,
jack.