Вот, недоступные символы сразу заменяются, что не так?
<input type="text" id="test" name="test" value="" size="37">
<script>
function replace() {
this.value = this.value.replace(/[^а-яА-Я\s]+/g,'') ;
} ;
document.getElementById("test").onkeyup = replace ;
</script>