2

次のコードを使用して、一部のメールアドレスが正しいかどうかを確認しようとしています。

NSPredicate *regexMail = [NSPredicate predicateWithFormat:@"SELF MATCHES '.*@.*\..*'"];
if([regexMail evaluateWithObject:someMail])
... 

しかし "\。" メール「smith@company」が受け付けられているため、動作しないようです。また、次の警告があります:「不明なエスケープシーケンス」

編集 :

私はiPhone用のObjective-Cでプログラミングしています。

ありがとう

4

8 に答える 8

13

これは、電子メール アドレスを検証するために iOS メール アプリケーションで使用される正規表現です。

^[[:alnum:]!#$%&’*+/=?^_`{|}~-]+((\.?)[[:alnum:]!#$%&’*+/=?^_`{|}~-]+)*@[[:alnum:]-]+(\.[[:alnum:]-]+)*(\.[[:alpha:]]+)+$

そして、この正規表現を使用して Objective-C で電子メール アドレスを検証する、コピー/貼り付けの準備が整った関数を次に示します。

BOOL IsValidEmail(NSString *email)
{
    // Regexp from -[NSString(NSEmailAddressString) mf_isLegalEmailAddress] in /System/Library/PrivateFrameworks/MIME.framework
    NSString *emailRegex = @"^[[:alnum:]!#$%&'*+/=?^_`{|}~-]+((\\.?)[[:alnum:]!#$%&'*+/=?^_`{|}~-]+)*@[[:alnum:]-]+(\\.[[:alnum:]-]+)*(\\.[[:alpha:]]+)+$";
    NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailPredicate evaluateWithObject:email];
}
于 2012-01-14T17:08:11.447 に答える
6

You cannot correctly validate an email address with regular expressions alone. A simple search will show you many articles discussing this. The problem lies with the nature of DNS: there are too many possible domain names (including non-english and Unicode domains), you cannot correctly validate them using a regex. Don't try.

The only correct way to determine if an email address is valid is to send a message to the address with a unique URL that identifies the account associated with the email, for the user to click. Anything else will annoy your end-user.

于 2010-07-05T14:00:06.853 に答える
3

もう少し適切なパターンを使用した実際の例を次に示します (ただし、他の人が言及しているように、完全ではありません)。

NSString* pattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
if ([predicate evaluateWithObject:@"johndoe@example.com"] == YES) {
  // Match
} else {
  // No Match
}
于 2010-07-05T14:59:40.237 に答える
2

それ自体もエスケープする必要がある\\.ため、それはであるべきだと思います。\

于 2010-07-05T13:31:40.580 に答える
2

このページには、正規表現を使用して電子メールを検証するための適切な説明と、いくつかの正規表現があります。

http://www.regular-expressions.info/email.html

彼らの表現:

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

完全性と正確さの間の最良のトレードオフのようです。

于 2010-07-05T13:34:27.360 に答える
0

私はあなたがこれを探していると思います。さまざまな正規表現の非常に包括的なリストと、それぞれのメールアドレスのリストで、正規表現が成功したかどうかが示されます。

于 2010-07-05T14:04:27.427 に答える
0

1 つのスラッシュの代わりに 2 つのスラッシュを入れてみてください。それが Unknown エスケープ シーケンスの意味かもしれません。

正規表現の使用方法を理解するのに役立つ Web サイトは次のとおりです: http://www.wellho.net/regex/java.html

または、ここでメールアドレスの適切な正規表現を見つけてください: http://regexlib.com/DisplayPatterns.aspx?cattabindex=0&categoryId=1

于 2010-07-05T13:44:35.353 に答える