2016-07-16 9 views
-3

ユーザが入力した電子メールアドレスを正規表現と照合するプログラムを作成しました。ユーザーが正規表現と一致しない不正確な電子メールを入力すると、電子メールが正しくないことをユーザーに知らせるprintステートメントが実行されます。私がしたいことは、なぜ電子メールが間違っているのか、つまり、ユーザーが入力した電子メールが一致しない正規表現の部分を特定することができるということを伝えることができます。私はこれを行う方法が不明です。文字列のどの部分が正規表現と一致しないのかを調べる

import re 
student = [] 
while True: 
    email = input("Please enter the email, for eg [email protected]") 
    if not re.match("^[A-Za-z0-9]{5,25}@{1}[A-Za-z]{5,15}[.]{1}[A-Za-z {3,10}$", email): 
     print("Sorry incorrect format, please re-enter email") 
    else: 
     student.append(email) 
     print(student) 
     break 
+0

にマッチしますか? –

+0

正規表現は一致するかしないか...グレー領域はありません。コード内の電子メールアドレスを解析し、特定の問題を報告する必要があります。実際には、それはおそらく多くのユーザーを助けてくれません。 –

+0

有効な電子メールアドレスをテストする正規表現では、ドット区切り名、追加記号、複数のセグメント化されたドメイン名など、あらゆる可能性を考慮していません。例えば: 'Ro.Yo.Me + stackoverflow @ ix.netcom.com'は標準で完全に有効ですが、あなたのテストは失敗します。また、式にエラーがあります。最後の文字クラスには閉じ括弧がありません。 –

答えて

0

Foreward

有効なメールアドレスを記述したルールがたくさんあります。これらは必要ないとして、{1}数量詞を削除

^[A-Za-z0-9]{5,25}@{1}[A-Za-z]{5,15}[.]{1}[A-Za-z {3,10}$ 
    2    1 2    1 2  3 
  1. :ここに私の提案された解決策は、私だけがあなたの基準の式に以下の変更を行うことをお勧めします、あなたの元の質問に^[A-Za-z0-9]{5,25}@{1}[A-Za-z]{5,15}[.]{1}[A-Za-z {3,10}$

    を説明したルールをテストしています

  2. 文字クラスからA-Zを削除し、大文字小文字を区別しないフラグを使用
  3. 最後CHA上のクロージング]を挿入

    ^[a-z0-9]{5,25}@[A-Za-z]{5,15}[.][a-z]{3,10}$ 
    

    説明

    ^(?=(?:.*[email protected]*?(?P<TooManyAtSigns>@))?)(?=(?P<NoAtSign>[^@\n]*$)?)(?=(?:[a-z0-9]*?(?P<BadCharacterInUsername>[^[email protected]\n]))?)(?=(?:.*[email protected][a-z.]*?(?P<BadCharacterInDomain>[^a-z.\n]))?)(?=(?:(?:(?P<UsernameTooShort>[a-z0-9.]{0,4})|(?P<UsernameTooLong>[a-z0-9.]{26,}))@)?)(?=(?:.*[email protected](?:(?P<DomainNameTooShort>[A-Za-z]{0,4})|(?P<DomainNameTooLong>[a-z]{16,}))[.])?)(?=(?:.*[email protected](?P<DomainNameMissingDot>[^.\n]*)$)?)(?=(?:.*[email protected]*?[.](?:(?P<TopLevelDomainNameTooShort>[a-z]{0,2})|(?P<TopLevelDomainNameTooLong>[a-z]{11,}))$)?)(?=(?:.*?(?P<FoundASpace>\))?)(?P<email>.*)$

    enter image description here

    **良好な画像を表示するには、単に右の画像をクリックしてください:racterクラスは

結果の式は次のようになります新しいウィンドウでビューを選択

**単に右この正規表現は、次の手順を実行します画像をクリックすると新しいウィンドウで

をビューを選択し、良好な画像を表示するには:

  • ユーザーが繰り返しゲームをプレイ嫌いを一度に一つのことを訂正するところでは、この式はすべてのものを前もってテストし、間違っていることをすべて伝えます。
  • さまざまなテストを実行します。これらのテストが見つかった場合は、関連する名前付きキャプチャグループが作成されます。キャプチャグループが移入されていない場合、テストは@文字
  • は無効な文字を見つけ、ドメイン名のセクションではありません.あまりにも多くの
    • を可決しました。このテストでは、唯一の@前に見つかった最初の無効な文字と@
    • ユーザー名が短すぎたり長すぎる
    • ドメイン名が短すぎたり、長された後最初の無効な文字が表示されます。例:@gm.comまたは@TheForceIsWithYouAllTheTime.comサイドノートgm.comは、ゼネラルモーターズの有効なドメイン名です。
    • トップレベルドメイン名が短すぎるか長すぎます。例:@gmail.auまたは@gmail.WhyIsThisNameSoLongサイドノート.auは有効な最上位レベルの名前です。
  • スペース

ライブデモ

https://regex101.com/r/cQ0jR6/2

サンプルテキスト

を検索します0
[email protected] 
[email protected] 
[email protected] 
[email protected]@gmail.com 
[email protected] 
RoYoMiGmail.com 
[email protected]!m 
[email protected] 
[email protected] 
[email protected] 
[email protected]@Gma.InterGalatic 
[email protected] 

サンプルは、あなたが道で表示したいメッセージはどのような

MATCH 1 
email [0-16] `[email protected]` 

MATCH 2 
UsernameTooShort [17-20] `RoY` 
email [17-30] `[email protected]` 

MATCH 3 
UsernameTooLong [31-62] `RoYoMiInternationalManOfMystery` 
email [31-72] `[email protected]` 

MATCH 4 
TooManyAtSigns [81-82] `@` 
BadCharacterInUsername [75-76] `!` 
BadCharacterInDomain [81-82] `@` 
email [73-91] `[email protected]@gmail.com` 

MATCH 5 
DomainNameTooShort [99-101] `gm` 
email [92-105] `[email protected]` 

MATCH 6 
NoAtSign [106-121] `RoYoMiGmail.com` 
BadCharacterInUsername [117-118] `.` 
email [106-121] `RoYoMiGmail.com` 

MATCH 7 
BadCharacterInDomain [133-134] `!` 
DomainNameMissingDot [129-135] `gmco!m` 
email [122-135] `[email protected]!m` 

MATCH 8 
DomainNameTooLong [143-177] `ThisIsNotTheDroidYouWereLookingFor` 
email [136-181] `[email protected]` 

MATCH 9 
TopLevelDomainNameTooShort [195-197] `co` 
email [182-197] `[email protected]` 

MATCH 10 
TopLevelDomainNameTooLong [211-223] `InterGalatic` 
email [198-223] `[email protected]` 

MATCH 11 
TooManyAtSigns [228-229] `@` 
BadCharacterInDomain [228-229] `@` 
UsernameTooShort [224-227] `RoY` 
DomainNameTooShort [229-232] `Gma` 
TopLevelDomainNameTooLong [233-245] `InterGalatic` 
email [224-245] `[email protected]@Gma.InterGalatic` 

MATCH 12 
DomainNameTooLong [253-282] `MoreDroidsYouAreNotLookingFor` 
email [246-286] `[email protected]` 
関連する問題