2種類以上なら…
  ^([a-z]*|[0-9]*|[記号]*)$ の否定を取るだけでいいかな
  あとは[a-z][0-9]といった途中で文字種が変化するパターンを1個見つければいいとかさ

2種類だけだと…
  ^([a-z0-9]*|[a-z記号]*|[0-9記号]*)$ こうするしかないかな?