если существует любые буквы или буквы + \n или отдельно \n то текст валиден.
Ответ: ^[a-zA-Z]*\n?$
Примеры:
/^[a-zA-Z]*\n?$/.test("asd") //true
/^[a-zA-Z]*\n?$/.test("asd\n") //true
/^[a-zA-Z]*\n?$/.test("asd\n\n") //false
/^[a-zA-Z]*\n?$/.test("asd asd") //false
/^[a-zA-Z]*\n?$/.test("123") //false
/^[a-zA-Z]*\n?$/.test("asd123") //false
/^[a-zA-Z]*\n?$/.test("\nasd") //false
/^[a-zA-Z]*\n?$/.test("\n") //true
/^[a-zA-Z]*\n?$/.test("") //true
P.S. "Любые буквы" включает также и их отсутствие, т.к. на пустом множестве верно любое утверждение. Если пустота не валидна, то это нужно оговаривать (и проверять) отдельно.
P.P.S. Обычно перед тем, как скармливать "грязный" текст регулярному выражению, полезно выполнить
.trim(), чтобы убрать пробельные символы в начале и в конце текста (но не в середине). Это избавит от необходимости помнить, что в конце может быть \n или случайно нажатый пробел (например, при вводе логина или пароля) и т.п.