Hmmm… Trong trường hợp này thì bạn dùng regex để kiểm tra xem trong chuỗi ngoài kí tự ra thì còn cái gì khác không. Nếu có thì thông báo không hợp lệ. Lưu ý, để có thể dùng được cho trường hợp nhập tên tiếng Việt thì phải chuyển tên Tiếng Việt sang Tiếng Anh rồi mới dùng regex để kiểm tra. Code chuyển Tiếng Việt thành Tiếng Anh đây, còn cái kiểm tra bằng regex thì tự bạn làm, đơn giản lắm, chỉ cần dùng .match() và regex là xong:
let str = "PHẦN MỘT. LỊCH SỬ THẾ GIỚI THỜI NGUYÊN THỦY, CỔ ĐẠI VÀ TRUNG ĐẠI"; //Ví dụ
str
.normalize("NFD") //Chuyển từ tiếng Việt sang tiếng Anh theo kiểu Unicode tổ hợp.
.replace(/[\u0300-\u036f]/g, "") //Xoá thanh điệu.Link gốc đây: https://stackoverflow.com/a/37511463
.replace(/đ/g, "d") //Chuyển "đ' thành "d'
.replace(/Đ/g, "D"); //Chuyển "Đ" thành "D", vì " đ" và "Đ" là kí tự độc lập nên phải xử lí riêng
Link gốc của code tại đây: https://gist.github.com/hu2di/e80d99051529dbaa7252922baafd40e3#gistcomment-2983674. Mình chỉ thêm chút comment để giải thích thôi.