正規表現とは

「文字列を一つの形式で表現するための方法」で、文字列を特殊文字パターンで検索するのに利用 例えば、メールアドレスに @ や ドメインがはいっているか、文章に特定の文字が含まれているかなどをのチェックなどです。

文章だけでは説明が難しいため例をあげて説明します。

検索する文字列の例

私はうどんが好きです

私は走るのが速いです

上記の文章は、以下のパターンにあてはまります。

私はxxxxがxxxxです

このようにパターン化した曖昧な検索ができ、マッチしたか判別して、処理をふりわけることができます。

正規表現のパターン

正規表現のパターンは「半角英数」と「特殊文字」を組み合わせて表現します。 特殊文字やパターンはすべて暗記するのは難しいのですが、ある程度法則は知る必要はあります。

特殊文字

.   ^   $   [   ]   *   +   ?   |   (   ) \ /

正規表現の基本一覧

文字 説明
/ ~ / デリミタ、両端に記述することで条件範囲指定
. 任意の1文字にマッチ
+ 最長一致: 直前の文字が 1回以上繰り返す場合にマッチ
* 最長一致: 直前の文字が 0回以上繰り返す場合にマッチ
? 最短一致: 直前の文字が 0 か 1個の場合にマッチ
^ 直後の文字が行の先頭にある場合にマッチ
$ 直前の文字が行の末尾にある場合にマッチ
[...] 角括弧に含まれるいずれか1文字にマッチ
[^...] 角括弧に含まれる文字以外にマッチ
(...) 文字を 1つのグループにまとめる
{n} 直前の文字の n回繰り返し
{n,m} 直前の文字の n回以上、m回以下の繰り返し
\d または [0-9] すべての数字
\D または [^0-9] すべての数字以外の文字
\w または [a-zA-Z_0-9] アルファベット、アンダーバー、数字
\W または [^a-zA-Z_0-9] アルファベット、アンダーバー、数字以外の文字

正規表現のパターン例

アルファベットのみ

/^[a-zA-Z]*$/

半角数字のみ

/^[0-9]*$/

ふりがなのみ

/^[\u3040-\309F]+$/

URL

/^https?:\/\/([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/

メールアドレス

/^[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

日付

/^\d{4}[-\/]\d\d[-\/]\d\d$/

match() による文字検索(正規表現)

match() を利用して、文字列を正規表現パターンに一致するか判別します。

文字列.match(正規表現パターン)

アルファベット

var value = "Yokohama";
var regex = /[a-zA-Z]/g;
var matches = value.match(regex)
console.log(matches);
結果
(8) ["Y", "o", "k", "o", "h", "a", "m", "a"]

ユーザ登録フォームのチェック

氏名、ふりがな(ひらがな)をチェックしてみましょう。

  • 氏名:全角文字、全角スペース
  • ふりがな:ひらがな、全角スペース

HTML

HTML で氏名、ふりがなの入力項目を用意し、button タグで JavaScript を実行します。

  <h2>氏名</h2>
  <input type="text" id="user_name">
  <p id="error_user_name"></p>

  <h2>ふりがな</h2>
  <input type="text" id="user_furigana">
  <p id="error_user_furigana"></p>

  <button onclick="regist()">登録</button>

全角文字チェック

変数 pattern に「全角文字」の正規表現のパターンを設定し、match() でチェックします。全角スペースも追加しておきます。

function checkZenkaku(value)
{
    var regex = /^[^\x01-\x7E ]+$/;
    var message = '';

    //正規表現チェック
    if (!value.match(regex)) {
        message = '全角で入力してください';
    }
    return message;
}

ひらがなチェック

変数 pattern に「ひらがな」の正規表現のパターンを設定し、match() でチェックします。全角スペースも追加しておきます。

function checkHiragana(value)
{
    var regex = /^[\u3040-\u309F ]+$/;
    var message = '';

    //正規表現チェック
    if (!value.match(regex)) {
        message = 'ひらがなで入力してください';
    }
    return message;
}

登録処理でデータチェック

regist() で、全角、ひらがなチェックをし、エラーの場合は HTMLにエラーメッセージを表示します。

function regist()
{
    var user_name = document.getElementById('user_name').value;
    document.getElementById('error_user_name').innerHTML = checkZenkaku(user_name);

    var user_furigana = document.getElementById('user_furigana').value;
    document.getElementById('error_user_furigana').innerHTML = checkHiragana(user_furigana);
}

演習

問題1

郵便番号を追加してチェックしてみましょう。

問題2

パスワード(8文字以上)を追加してチェックしてみましょう。

問題3

メールアドレスを追加してチェックしてみましょう。