コンテンツにスキップ

入力値の形式チェック

ここではオフィススクリプトを使って、郵便番号や電話番号などの入力値が正しい形式かどうかを、正規表現でチェックする方法をサンプルコードと併せて解説します。

正規表現(RegExpオブジェクト)に含まれている、testメソッドを使用します。

/**
* @param string チェックする文字列
* @return 正規表現に一致する部分があれば true
*/
test(string: string): boolean;
/** 郵便番号の形式(3 桁の数字、ハイフン、4 桁の数字) */
const pattern = /^\d{3}-\d{4}$/;
console.log(pattern.test('100-0005')); // true
console.log(pattern.test('1000005')); // false

testメソッドは、文字列の 一部分 が正規表現に一致すればtrueを返します。

そのため、/\d{3}-\d{4}/のように先頭と末尾を指定しないと、1234-56789のような桁数の多い文字列も、途中の234-5678が一致してtrueになってしまいます。

以下で、どの部分が一致しているかを確かめてみましょう。パターンの前に^、後ろに$を付けると、一致しなくなります。

フラグ

一致した箇所1 箇所

1234-56789

  • メソッドが使う一致
  • 使われない一致

結果/\d{3}-\d{4}/.test(zipCode)true

    パターンや文字列を変えて、一致する箇所と結果を確かめてみましょう。

    ^は文字列の先頭、$は文字列の末尾を表します。形式をチェックする場合は、パターン全体を^と$で囲むことを覚えておきましょう。

    チェックする内容 パターン 一致する例
    郵便番号(ハイフンは省略可) /^\d{3}-?\d{4}$/ 100-0005、1000005
    半角数字のみ /^\d+$/ 12345
    携帯電話番号(ハイフンは省略可) /^0[789]0-?\d{4}-?\d{4}$/ 090-1234-5678、09012345678
    半角英数字のみ /^[A-Za-z0-9]+$/ abc123
    日付(年/月/日) /^\d{4}\/\d{1,2}\/\d{1,2}$/ 2026/11/2、2026/01/02
    メールアドレス(簡易) /^[^\s@]+@[^\s@]+\.[^\s@]+$/ sato@example.jp

    ?は直前の文字が 0 回か 1 回、{3}は直前の文字がちょうど 3 回、{1,2}は 1 回から 2 回の繰り返しを表します。

    iフラグを付けると、アルファベットの大文字と小文字を区別せずにチェックできます。以下でiフラグを外すと、大文字を含む文字列が一致しなくなることを確かめてみましょう。

    フラグ

    一致した箇所1 箇所

    ABC123

    • メソッドが使う一致
    • 使われない一致

    結果/^[a-z0-9]+$/i.test(code)true

      パターンや文字列を変えて、一致する箇所と結果を確かめてみましょう。

      形式が正しくないセルに色を付ける

      Section titled “形式が正しくないセルに色を付ける”

      A2:A6の郵便番号をチェックし、形式が正しくないセルの背景を赤くするサンプルコードです。

      郵便番号の形式をチェックするサンプル
      function main(workbook: ExcelScript.Workbook) {
      const sheet = workbook.getActiveWorksheet();
      /** 郵便番号の形式(ハイフンは省略可) */
      const pattern = /^\d{3}-?\d{4}$/;
      /** チェックする範囲(見出しを除く) */
      const range = sheet.getRange('A2:A6');
      const values = range.getValues();
      values.forEach((row, i) => {
      /** セルの値(数値で入力されている場合も文字列としてチェックし、前後の空白は取り除く) */
      const value = String(row[0]).trim();
      /** セルの塗りつぶし */
      const fill = range.getCell(i, 0).getFormat().getFill();
      if (pattern.test(value)) {
      // 修正後に再実行したときのために、以前に付けた色を消す
      fill.clear();
      return;
      }
      fill.setColor('#FFC7CE');
      console.log(`${i + 2}行目の「${value}」は郵便番号の形式ではありません`);
      });
      }
      A
      1郵便番号
      2100-0005
      31000005
      4100-00055
      5100-0005
      6100_0005
      • Sheet1

      サンプルコードを実行した後のシート

      • A2:A6チェックする範囲
      • A4:A6形式が正しくない(背景を赤くする)セル

      100-00055は桁数が多く、100-0005は全角数字のため、100_0005はハイフンではないため、いずれも形式が正しくないと判定されます。

      形式が正しいセルは塗りつぶしを消しているため、データを修正してから再実行すると、色が付いたままになりません。空のセルは形式が正しくないと判定されるため、空欄を許可する場合はvalue === ''のときにもreturnしてください。

      g フラグを付けた正規表現を使い回さない

      Section titled “g フラグを付けた正規表現を使い回さない”

      testメソッドを使う正規表現にgフラグを付けると、前回一致した位置(lastIndex)が正規表現に記録され、次のtestはその位置から検索を始めます。

      そのため、同じ正規表現を使い回すと、同じ文字列をチェックしても結果が交互に変わってしまいます。

      gフラグを付けた正規表現の使い回し
      const pattern = /^\d+$/g;
      console.log(pattern.test('123')); // true
      console.log(pattern.test('123')); // false(前回の続きから検索するため)
      console.log(pattern.test('123')); // true

      形式のチェックでは、gフラグを付けないようにしましょう。