2014-01-04 1 views
-1

Здесь есть несколько запросов о том, как проверять адреса электронной почты с помощью регулярных выражений и/или JavaScript и т. Д. Я также читал о классе Cocoa NSScanner, который должен выполнять синтаксический анализ. Использование носит странный характер, но я прочитал страницу, на которой программист проверял файл CSV с NSScanner.
Может ли NSScanner обрабатывать адрес электронной почты синтаксиса?Подтвердить и извлечь адрес электронной почты с помощью NSScanner?

(если это возможно, чтобы быть более полезным, код не может просто проверить, но и обеспечить способ извлечения: локальная часть, домен, читаемый имя пользователя (если таковые имеются), а также любые комментарии)

ответ

1

Как об использовании более современного NSRegularExpression (OS X v10.7 +, IOS 4.0+) вместо:

- (BOOL) isValidEmail:(NSString*) emailString 
{ 
    // valid email address according to RFC 2822 
    // Check http://www.cocoawithlove.com/2009/06/verifying-that-string-is-email-address.html 
    NSString *emailRegEx = 
    @"(?:[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 = nil; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:emailRegEx 
                      options:NSRegularExpressionCaseInsensitive 
                      error:&error]; 
    if (error != nil) 
     return NO; 

    NSRange stringRange = NSMakeRange(0, emailString.length); 
    NSRange matchRange = [regex rangeOfFirstMatchInString:emailString options:0 range:stringRange]; 

    return NSEqualRanges(matchRange, stringRange); 
} 

Также проверьте this CocoaWithLove блога (2009 г., но до сих пор в основном действует) для более подробного обсуждения. .

+0

Это тот же сайт, на котором обсуждался [с использованием 'NSScanner' для анализа данных CSV] (http://www.cocoawithlove.com/2009/11/writing-parser-using-nsscanner-csv.html). – CTMacUser

+0

Вопрос о методе non-regex заключается в том, что я читал в одном из многих «лучших регулярных выражений для адресов электронной почты», что регулярное выражение несовместимо с синтаксисом электронной почты, поскольку комментарии могут входить (и регулярные выражения могут " t). Но похоже, что отсутствие совместимости с комментариями не беспокоит большинство разработчиков. – CTMacUser

+0

Код анализирует любой действительный адрес электронной почты в соответствии с RFC 2822 - * Формат интернет-сообщений *. – Jay

 Смежные вопросы

  • Нет связанных вопросов^_^