0

質問に入る前に、これを前置きさせてください。メールアドレスの検証に関して、従わなければならない一連の厳格な要件がありました。私はそれらのいくつかに異議を唱えようとしましたが、却下されました。

とにかく、要件の中には次のものがありました。

  • 連続したピリオドなし
  • 位置 1 に特殊文字はありません
  • @ の前後にピリオドはありません
  • 次の文字を許可します: +!#$%&*/=?`{|}~'_-.

要件を満たすための私の試みは成功しましたが、1 つの障害がありました。ローカル部分に使用している正規表現が原因で、不適切な最小 3 文字が必要になりました。これが私の試みです:

(^(?!.*\\.{2})([a-zA-Z0-9{1}]+[a-zA-Z0-9\\._\\-\\+!#$%&*/=?`{|}~']+[a-zA-Z0-9{1}])+@([a-zA-Z0-9{1}]+[a-zA-Z0-9\\-]+[a-zA-Z0-9{1}]+\\.)+([a-zA-Z0-9\\-]{2}|net|com|gov|mil|org|edu|int|NET|COM|GOV|MIL|ORG|EDU|INT)$)|^$

なぜこれが起こっているのかは理解していますが、それを回避する方法がわかりません。どんな援助でも大歓迎です。

編集: 多くの議論の結果、私の問題は電子メール アドレスのローカル部分に固有のものではないことが判明しました。ドメイン部分も同じ問題に苦しんでいます。

ありがとう、セブ

4

2 に答える 2

2

ローカル部分( の前の部分@) の場合、これは上記のすべての条件を満たす正規表現フラグメントです。

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

壊す:

^                                 # Beginning of the string
[a-zA-Z0-9]                       # First character is not special
[a-zA-Z0-9+!#$%&*/=?`{|}~'_-]*    # 0 or more alphanumeric and special characters, except .
(?:                               # Group, repeated 0 or more times
  \.                              # A literal .
  [a-zA-Z0-9+!#$%&*/=?`{|}~'_-]+  # 1 or more alphanumeric and special characters, except .
)*

上記の正規表現に見られるように、 「連続するピリオドなし」および「@ の直前または直後にピリオドがない」.という条件は、2 つのドット以外の文字の間にのみ表示されるという事実によって強制されます。

私はメールの仕様について完全な知識を持っていないため、質問の条件を満たしている場合でも、そのメールが仕様どおりに有効であるとは保証できません


ドメイン部分には{1}、文字クラス内で同じ問題があります。

自由にhostnameの制限を使用します。ここで、ラベルは で始まったり終わったりしてはなりません-

[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)*

TLD を適用する場合:

[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)*\.(?i:[a-z0-9]{2}|net|com|gov|mil|org|edu|int)

iフラグ付きの非キャプチャ グループを使用して、TLD の大文字と小文字を区別しないことに注意してください。

于 2013-08-27T15:46:45.730 に答える