【PowerShell】正規表現で入力されたメールアドレスの形式が正しいかチェックする

こんにちは。
けいぞうです。

前回の記事で正規表現でよく使うメタ文字についてのまとめをしました。

今回はお決まりのPowerShellで、
入力されたメールアドレスが正しい形式か確認するチェック処理を作成してみます。

メールアドレス形式チェックのサンプルスクリプト

入力されたメールアドレスが正しい形式か(ちゃんとメールアドレスっぽい文字列なのか)を確認するツールを作ってみました。

⇩こんなのです⇩

作成したスクリプトのソースコードは以下になります。

# アセンブリの読み込み
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
Add-Type -AssemblyName presentationCore

# フォーム
$form = New-Object System.Windows.Forms.Form
$form.Text = "メールアドレスチェッカー"
$form.Size = New-Object System.Drawing.Size(380,180)

# チェックボタンの設定
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(100,93)
$OKButton.Size = New-Object System.Drawing.Size(75,30)
$OKButton.Text = "チェック"
$OKButton.DialogResult = "OK"

# テキストボックス
$mailAddressTextBox = New-Object System.Windows.Forms.TextBox
$mailAddressTextBox.Location = New-Object System.Drawing.Point(10,50)
$mailAddressTextBox.Size = New-Object System.Drawing.Size(300,50)
$mailAddressTextBox.Text = $mailAddress

# ラベルの設定
$mailAddresslabel = New-Object System.Windows.Forms.Label
$mailAddresslabel.Location = New-Object System.Drawing.Point(10,30)
$mailAddresslabel.Size = New-Object System.Drawing.Size(300,20)
$mailAddresslabel.Text = "メールアドレスを入力してください"

# キーとボタンの関係
$form.AcceptButton = $OKButton

# ボタン等をフォームに追加
$form.Controls.Add($OKButton)
$form.Controls.Add($mailAddressTextBox)
$form.Controls.Add($mailAddresslabel)

#メッセージ表示用のオブジェクト
$wsobj = new-object -comobject wscript.shell

$roop = $true
while($roop){

# フォームを表示させ、その結果を受け取る
$result = $form.ShowDialog()

$CheckResult = $false

    #チェックボタンを押したらチェックする
    if($result -eq "OK"){
    
        if($mailAddressTextBox.Text.ToString() -match "^([a-zA-Z0-9])+([a-zA-Z0-9\._-])+([a-zA-Z0-9])+@([a-zA-Z0-9])+([a-zA-Z0-9\._-])+([a-zA-Z0-9])+$")
        {
            $CheckResult = $true
            
            #メッセージ表示
            $StartMessage = "メールアドレスの形式は正しいです"
            $result = $wsobj.popup($StartMessage,0,"チェック結果",0)
        }
        else
        {
            $CheckResult = $false
    
            #メッセージ表示
            $StartMessage = "メールアドレスの形式は不正です"
            $result = $wsobj.popup($StartMessage,0,"チェック結果",0)
        }
    }else{
        return
    }
}

解説

今回重要なのは52行目のみです。

それ以外はPowerShellでメッセージボックスを表示するお話だったり、別のお話になりますので、そこも知りたい方は下記の記事たちをご参照ください。

⇒PowerShellの使い方(初級編)

⇒PowerShellでメッセージボックスを表示する方法

⇒PowerShellでポモドーロタイマーを作ろう


52行目に記述している内容を簡単に説明すると

「入力された値と正規表現で記述したメールアドレス形式が一致しているかどうか」

を見ています。

$mailAddressTextBox.Text.ToString() -match "^([a-zA-Z0-9])+([a-zA-Z0-9\._-])+([a-zA-Z0-9])+@([a-zA-Z0-9])+([a-zA-Z0-9\._-])+([a-zA-Z0-9])+$"

「-match」はPowerShellで使う比較演算子で、正規表現と一致しているかどうかを判断します。(普通の文字列の比較演算子は「-eq」)

で、今回の正規表現文字列はこんなの

^([a-zA-Z0-9])+([a-zA-Z0-9\._-])+([a-zA-Z0-9])+@([a-zA-Z0-9])+([a-zA-Z0-9\._-])+([a-zA-Z0-9])+$
  • 先頭の文字は英数字のみ
  • @直前の文字も英数字のみ
  • それ以外の@以前の文字は英数字か「.」「_」「-」を使用可能
  • @以降の先頭の文字は英数字のみ
  • 末尾は英数字のみ
  • それ以外の@以降の文字は 英数字か「.」「_」「-」を使用可能

って感じです。ダサくてごめんなさい 笑

でも大体それらしい形式チェックはこれで可能ですね。


でもこれだとそもそも@以前は3文字以上必要だし、あと連続したドットを許したくないとか、色々追加でカスタマイズしたい方はチャレンジしてみてください。