私は何かを得たかもしれないと思います!間違いなく改善される可能性がありますが、変更を提案する前に、少し弁護させてください. 正規表現は次のとおりです。
/^(?:("{0,1})(\w+ \w+)\1 <([^@ ]+@[^@ ]+\.[^@. ]+)>|([^@ ]+@[^@ ]+\.[^@. ]+))$/
それが何をするのか説明しましょう。1 つ目^(?:
は、テキストはフィールドの先頭から開始する必要があり、次のグループは後方参照でキャプチャされないことを示しています。次に、オプション項目を開始します。"
0 または 2 のいずれか、および 0 または 2<
のマークを必要とするため、これを行う必要があります。オプション項目の最初の部分 (|
バーの前) は、ケース 2 と 3 を扱います。
ケース 2 および 3:
は("{0,1})
、先頭に引用符があるかどうかをキャプチャします。次に(\w+ \w+)
、ケース 2 とケース 3 で、スペースで区切られたファースト ネームとセカンド ネームを要求するために を使用します。それらを囲む括弧はそれらを後方参照に取り込み、後で名前の値を取得できるようにします。それから\1
- これは前の引用符からの後方参照です。名前の先頭に引用符を使用した場合は、名前の末尾にも引用符を使用する必要があると書かれています。次に<
、ケース 2 と 3 の電子メール アドレスは、名前または末尾の引用符からスペースで区切る必要があり、小なり記号で始まる必要があると述べています。最後に、メールの正規表現を取得しました。これはどの場合も同じです。後方参照を作成するために括弧で囲まれています。の[^@ ]+@
実際の @ 記号の前に @ 記号またはスペースを入れてはならないことを保証します。以下[^@ ]+\.
は、@ 記号の後のピリオドで同じことを行い、末尾[^@. ]+
により、ピリオドの後に同じことが確実に行われます。次に、電子メール アドレスへの後方参照を終了する閉じ括弧と、>
記号が必要なケース 2 と 3 のためのものであるため、記号を付けます。
ケース 1:
次に、|
パイプに到達します。これは、正規表現の他のオプションに到達したことを示しています。テキストの形式がケース 2 と 3 の開始条件と一致しなかった場合、正規表現はそれが単なる電子メール アドレスであるかどうかを確認します (ケース 1)。ここでの正規表現は、ケース 2 と 3 の記号の間にあるものと同じ<>
です。これは、有効な電子メール アドレスに一致し、後方参照を作成します。
有効な形式:
機能する形式の不完全なリストを次に示します。
foo@bar.com
foo1.foo2@bar.com
foo1.foo2@bar1.bar2.com
Foo Bar <foo@bar.com>
"Foo Bar" <foo@bar.com>
foo bar <site1.site2@test1.test2.com>
"foo bar" <site1.site2@test1.test2.com>