入力値の形式チェック
ここではオフィススクリプトを使って、郵便番号や電話番号などの入力値が正しい形式かどうかを、正規表現でチェックする方法をサンプルコードと併せて解説します。
利用するメソッド
Section titled “利用するメソッド”正規表現(RegExpオブジェクト)に含まれている、testメソッドを使用します。
/** * @param string チェックする文字列 * @return 正規表現に一致する部分があれば true */test(string: string): boolean;/** 郵便番号の形式(3 桁の数字、ハイフン、4 桁の数字) */const pattern = /^\d{3}-\d{4}$/;
console.log(pattern.test('100-0005')); // trueconsole.log(pattern.test('1000005')); // false^ と $ で文字列全体を指定する
Section titled “^ と $ で文字列全体を指定する”testメソッドは、文字列の 一部分 が正規表現に一致すればtrueを返します。
そのため、/\d{3}-\d{4}/のように先頭と末尾を指定しないと、1234-56789のような桁数の多い文字列も、途中の234-5678が一致してtrueになってしまいます。
以下で、どの部分が一致しているかを確かめてみましょう。パターンの前に^、後ろに$を付けると、一致しなくなります。
一致した箇所1 箇所
1234-56789
- メソッドが使う一致
- 使われない一致
結果/\d{3}-\d{4}/.test(zipCode)true
パターンが正しくありません:
パターンや文字列を変えて、一致する箇所と結果を確かめてみましょう。
^は文字列の先頭、$は文字列の末尾を表します。形式をチェックする場合は、パターン全体を^と$で囲むことを覚えておきましょう。
よく使うパターン
Section titled “よく使うパターン”| チェックする内容 | パターン | 一致する例 |
|---|---|---|
| 郵便番号(ハイフンは省略可) | /^\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 回の繰り返しを表します。
大文字と小文字を区別しない
Section titled “大文字と小文字を区別しない”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 | 郵便番号 |
| 2 | 100-0005 |
| 3 | 1000005 |
| 4 | 100-00055 |
| 5 | 100-0005 |
| 6 | 100_0005 |
- Sheet1
サンプルコードを実行した後のシート
A2:A6チェックする範囲A4:A6形式が正しくない(背景を赤くする)セル
100-00055は桁数が多く、100-0005は全角数字のため、100_0005はハイフンではないため、いずれも形式が正しくないと判定されます。
形式が正しいセルは塗りつぶしを消しているため、データを修正してから再実行すると、色が付いたままになりません。空のセルは形式が正しくないと判定されるため、空欄を許可する場合はvalue === ''のときにもreturnしてください。
g フラグを付けた正規表現を使い回さない
Section titled “g フラグを付けた正規表現を使い回さない”testメソッドを使う正規表現にgフラグを付けると、前回一致した位置(lastIndex)が正規表現に記録され、次のtestはその位置から検索を始めます。
そのため、同じ正規表現を使い回すと、同じ文字列をチェックしても結果が交互に変わってしまいます。
const pattern = /^\d+$/g;
console.log(pattern.test('123')); // trueconsole.log(pattern.test('123')); // false(前回の続きから検索するため)console.log(pattern.test('123')); // true形式のチェックでは、gフラグを付けないようにしましょう。