(JS)お問い合わせフォームで各必須項目にスペースが入力されたときに制御する方法

こんにちは!今日は表題の件について説明をしようと思います。

今回の仕様は以下の通り!
①送信ボタンをクリックする時に、必須項目が空だったりスペース(半角・全角)が入っている場合は
 JSでアラートを表示する
②アラートの該当項目はフォーカスさせるために、カーソルをあてる。

実際のソースがこちら!

$('#mailForm input:submit').click(function () {
            for ( i = 0; i < requiredItemIds.length; i++ ) {
                if ($(requiredItemIds[i]).val().match(/^[  \r\n\t]*$/)) {
                    alert('スペースのみを入力することはできません。');
                    console.log(requiredItemIds[i]);

                    $(requiredItemIds[i]).val('');
                    $(requiredItemIds[i]).focus();
                    return false;
                }
            }
        });

上記はサブミットした時に必須項目が「空orスペース」の場合はアラートを表示後、該当フィールドにフォーカスする設定方法です。

もしスペースの場合にのみ、アラートを表示し、該当フィールドにフォーカスしたい場合は以下に変更します。

$('#mailForm input:submit').click(function () {
            for ( i = 0; i < requiredItemIds.length; i++ ) {
                if ($(requiredItemIds[i]).val().match(/^[  \r\n\t]+$/)) {
                    alert('スペースのみを入力することはできません。');
                    console.log(requiredItemIds[i]);

                    $(requiredItemIds[i]).val('');
                    $(requiredItemIds[i]).focus();
                    return false;
                }
            }
        });

ん?どこが変わったのかって?

そう!ここが今回のミソです。

変わった箇所はこの一文。

if ($(requiredItemIds[i]).val().match(/^[  \r\n\t]*$/)) {
if ($(requiredItemIds[i]).val().match(/^[  \r\n\t]+$/)) {

『*$』を『+$』に変更するだけ。

これ、どういう意味かというと、そもそも

+$  ⇒  1回以上の繰り返し
*$  ⇒  0回以上の繰り返し
$  ⇒  行末

といった意味を持っています。

で、例えば「あ[スペース]いうえお」と入力したときに行末にスペースはないけど
『*$』であれば行末にスペースがないのが0回以上の条件に当てはまるので何らかの配列を返しますよ!となってします。

なので、空欄の場合でもスペースのみの場合でも0回以上という解釈で配列がまわる。

ただ、『+$』だと「1回以上の繰り返し」という条件になるため「あ[スペース]いうえお」と入力したときは
行末にスペースがない、と判断しNULLとなります。

細かな違いでデザイナーにはすごく難しい笑
今回はプログラマーさんに教えてもらいながら進めました!
ありがとうございます!