1. ホーム
  2. objective-c

[解決済み】iOSでメールアドレスが有効であることを確認する【重複あり

2022-04-14 01:39:20

質問

<ブロッククオート

重複の可能性があります。

iOS 2.0のObjective-Cで電子メールアドレスを検証するためのベストプラクティス?

iPhoneアプリケーションを開発中で、ログイン時にメールアドレスを入力する必要があります。

メールアドレスが有効なメールアドレスであるかどうかを確認する方法はありますか?

どのように解決するのですか?

ココア機能が良い。

-(BOOL) NSStringIsValidEmail:(NSString *)checkString
{
   BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
   NSString *stricterFilterString = @"^[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$";
   NSString *laxString = @"^.+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*$";
   NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
   NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
   return [emailTest evaluateWithObject:checkString];
}

ラックスとストリクトの違いについての議論 http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/

また、カテゴリの方が良いので、インターフェイスを追加することもできます。

@interface NSString (emailValidation) 
  - (BOOL)isValidEmail;
@end

実装

@implementation NSString (emailValidation)
-(BOOL)isValidEmail
{
  BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
  NSString *stricterFilterString = @"^[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$";
  NSString *laxString = @"^.+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*$";
  NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
  NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
  return [emailTest evaluateWithObject:self];
}
@end

そして活用する。

if([@"[email protected]" isValidEmail]) { /* True */ }
if([@"InvalidEmail@notreallyemailbecausenosuffix" isValidEmail]) { /* False */ }