正規表現で文字列がメールアドレスの形式になっているか確認

正規表現を利用して文字列がメールアドレスの形式になっているか確認する。

正規表現で指定の文字列がメールアドレスの形式になっているかを確認します。

VBAで正規表現を利用するにはRegExpオブジェクトを利用します。
サンプルコードではRegExpオブジェクトのTestメソッドを利用して指定の文字列がメールアドレスの形式になっているかを確認し、その結果を返しています。

サンプルコードではケース1、2がメールアドレスの形式、3、4がメールアドレスの形式ではない文字列を確認しています。

'******************************************************************
' 文字列がメールアドレスの形式になっているか確認する
'******************************************************************
Sub Main_ChkMail()

    Dim sChkMailAdrs As String
    
    'ケース1
    sChkMailAdrs = "vba-samples1234@gmail.com"
    Debug.Print "「" & sChkMailAdrs & "」は" & runRegExpMail(sChkMailAdrs)

    'ケース2
    sChkMailAdrs = "vba_samples1234@yahoo.co.jp"
    Debug.Print "「" & sChkMailAdrs & "」は" & runRegExpMail(sChkMailAdrs)

    'ケース3
    sChkMailAdrs = "vba@samples@gmail.com"
    Debug.Print "「" & sChkMailAdrs & "」は" & runRegExpMail(sChkMailAdrs)

    'ケース4
    sChkMailAdrs = "abcd@com"
    Debug.Print "「" & sChkMailAdrs & "」は" & runRegExpMail(sChkMailAdrs)

End Sub

'******************************************************************
' 正規表現で値がメールアドレスの形式かチェックする
'------------------------------------------------------------------
'  第1引数:検査対象の文字列
'------------------------------------------------------------------
'  戻り値 :確認結果の文字列
'******************************************************************
Function runRegExpMail(getVal As Variant) As String

    ' メールアドレス形式の正規表現
    Dim sPattern As String
    sPattern = "^[a-zA-Z0-9]+([a-zA-Z0-9\._-]){0,63}@[a-zA-Z0-9-]+\.(?:[\.a-zA-Z0-9-]+)*$"
   
    Dim oReg As Object
    Set oReg = CreateObject("VBScript.RegExp")
    oReg.Pattern = sPattern  '検索するパターンを設定
    oReg.IgnoreCase = True   '大文字と小文字を区別(True:しない、Flase:する)
    oReg.Global = True       '文字列全体を検索(True:する、Flase:しない)

    If oReg.Test(getVal) Then
        runRegExpMail = "メールアドレスの形式です"
    Else
        runRegExpMail = "メールアドレスの形式ではありません"
    End If

    Set oReg = Nothing

End Function

■実行結果