У инпута типа файл есть очень удобный атрибут accept, где можно вставить расширение файла или mime тип:
<input type="file" accept=".xls,.xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
<input type="file" accept="image/*" /> <!-- all image types -->
<input type="file" accept="audio/*" /> <!-- all audio types -->
<input type="file" accept="video/*" /> <!-- all video types -->
Как сделать аналогичную валидацию на js, допустим, если уберут этот атрибут через инструмент разработчика и эта валидация просто пропадёт? Это spa на vue, поэтому отключением js можно не пугать