2017-08-02 6 views
1

私はRFC 5322標準に従って電子メールを検証しようとしています。私はC#で正規表現を使用した電子メールの検証は目的のプロジェクトでは機能しません

http://emailregex.com/から撮影
^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$ 

を次のC#の式を使用してきたが、私は私のObjective CのiOSアプリケーションにこのメールを使用しようとする時はいつでも誰かが私を助けることができる私は、エラーに

enter image description here

を取得していますこの表現がどのように改善されて、電子メールがRFC 5322標準と一致するかどうかを検証できるようになりましたか?これは、ドメインだけでなくIPアドレスの電子メールも大括弧で囲んでも受け入れる必要があることに留意してください。

答えて

0

前の回答は間違っています。閉じ括弧がないためではありません。 XCode さんはと言っていますあなたの引用を誤解しているため、閉じる括弧が欠けています。ロブはコメントで言ったように、あなたはそこにある」か、文字列リテラル、この正規表現パターンを入れると\

+1

を、ここで参照間違った「前の回答は、」その後削除されました。 – Rob

1

は、あなたが別の\を持つすべての"\文字をエスケープする必要がどこに式を再フォーマットする必要があります。したがって、すべての"となり\"、すべて\\\になります。残念ながら

を、あなたはそのC#の演出がNSRegularExpressionでは動作しない、ことを修正。しかし、私はRFC 5322公式の標準from that page you referencedをつかんだとき、それは開始時に^を追加した後に働いた後でも、とあなたは明らかにしなかった、とすべての"\文字エスケープのように10を最後に:未来の読者の利益のために

NSString *pattern = @"^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$"; 
NSError *error; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error]; 
NSAssert(regex, @"Regex failed: %@", error); 
関連する問題