1

人々がメールアドレスをアプリに貼り付けるために、いくつかの異なる形式を許可したいと考えています。それらは次のとおりです。

1. foo@bar.com
2. "Foo Bar" <foo@bar.com>
3. Foo Bar <foo@bar.com>

これらの 3 つのいずれかを取得して、電子メール アドレスと、存在する場合は主要な名前を与えることができる適切な Javascript 正規表現はありますか? これらは、ユーザーが現在アプリにコピーして貼り付ける形式のようです (現在、最初の形式のみをサポートしています)。

4

3 に答える 3

3

私は何かを得たかもしれないと思います!間違いなく改善される可能性がありますが、変更を提案する前に、少し弁護させてください. 正規表現は次のとおりです。

/^(?:("{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>

ワーキングデモ

于 2012-08-17T02:44:17.593 に答える
1

電子メールの検証をこの正規表現に単純化することをお勧めします。

/^(?:([^<]*)<)?([^@]+@[^.@]+\.[^@>]+)>?$/

メールを検証するために、この非常に優れたコード Google プロジェクトも確認してください: http://code.google.com/p/isemail/

上記の正規表現のライブデモ

于 2012-08-17T01:43:39.100 に答える
0

この正規表現は、次の 3 つのケースでメールを取得する必要があります。

/<?(\w+@\w+\.\w+)/
于 2012-08-17T01:39:44.360 に答える