requiredだけで十分だと思いますが、任意のエラー文書を表示したいなら適当なライブラリに頼るかinvalidで処理するかがベターで、alertはエラーが出ていることだけユーザーに返すほうがくどくなくてよいでしょう
参考
javascript
1<style>
2.err{
3color:red;
4}
5</style>
6<script>
7document.addEventListener('click',e=>{
8 if(e.target.matches('[type=submit]')){
9 document.querySelectorAll('.err').forEach(x=>x.remove());
10 }
11});
12document.addEventListener('invalid',e=>{
13 const t=e.target;
14 const err=Object.assign(document.createElement('span'),{'className':'err','textContent':t.dataset.err??'エラー'});
15 t.parentNode.insertBefore(err,t.nextSibling);
16 e.preventDefault();
17},true);
18</script>
19<form>
20<input required data-err="必須項目"><br>
21<input pattern="\d" data-err="数値のみ"><br>
22<input required><br>
23<input type="submit" value="send">
24</form>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。