Регулярное выражение работает некорректно
На PHP в UTF-8 необходимо использовать модификатор u 

Выдержка из мануала:
u (PCRE_UTF8)
This modifier turns on additional functionality of PCRE that is incompatible with Perl. Pattern strings are treated as UTF-8. This modifier is available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32. UTF-8 validity of the pattern is checked since PHP 4.3.5. 

Выражение примет вид /^([a-z \.\-]{1,20}|[а-яё \.\-]{1,20})$/ui
Да и ^([a-zA-Z \.\-]{1,20}|[а-яА-Я \.\-]{1,20})$ замечательно работает.