Каковы лучшие практики для проверки адресов электронной почты на iOS 2.0

Какой самый чистый способ проверки адреса электронной почты, который пользователь вводит в iOS 2.0?

ПРИМЕЧАНИЕ . Это исторический вопрос, характерный для iOS 2.0, и из-за его возраста и количества других вопросов, связанных с ним, он не может быть удален и НЕ ДОЛЖЕН изменяться на "вопрос.

167 голосов | спросил Marcus S. Zarra 29 AMpWed, 29 Apr 2009 02:37:24 +040037Wednesday 2009, 02:37:24

9 ответов


0

Лучшее решение, которое я нашел до сих пор (и которое я в итоге выбрал), это добавить RegexKitLite Проекту, который предоставляет доступ к регулярным выражениям через NSString Categories.

Добавлять в проект довольно безболезненно, и, как только он появится, любая логика проверки правильности электронной почты будет работать.

ответил Marcus S. Zarra 29 PMpWed, 29 Apr 2009 18:33:47 +040033Wednesday 2009, 18:33:47
0

Ответ на использование регулярного выражения для проверки адреса электронной почты очень подробно объясняет, что грамматика, указанная в RFC 5322 слишком сложен для примитивных регулярных выражений.

Я рекомендую настоящий парсерный подход, например MKEmailAddress .

Как быстрое решение для регулярных выражений, посмотрите эту модификацию DHValidation :

- (BOOL) validateEmail: (NSString *) candidate {
    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])+)\\])"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@", emailRegex]; 

    return [emailTest evaluateWithObject:candidate];
}
ответил catlan 19 J000000Sunday09 2009, 17:24:03
0

Прочитайте RFC. Почти каждый, кто считает, что знает, как разобрать /очистить /проверить адрес электронной почты, неправилен.

http://tools.ietf.org/html/rfc2822 Раздел 3.4.1 очень полезен. Уведомление

dtext = NO-WS-CTL /; Элементы управления без пробелов

                        % d33-90 /; Остальная часть США-ASCII
                        % d94-126; символы не включая «[»,
                                        ; "]", или же "\"

Да, это означает, что +, 'и т. д. являются законными.

ответил Trey 29 AMpWed, 29 Apr 2009 02:58:13 +040058Wednesday 2009, 02:58:13
0

Хорошее начало - это решить, что вы и не хотите принимать в качестве адреса электронной почты?

99% адресов электронной почты выглядят так: [email protected] или [email protected]

Однако технически законно иметь такой электронный адрес: f !#$%&'*+-/=?^_ {|} ~ "ha!" @ com

Вероятно, в мире существует всего несколько действительных электронных писем для доменов верхнего уровня, и почти никто не использует большинство этих других символов (особенно кавычки и обратные ссылки), поэтому вы можете предположить, что это все недопустимые вещи для делать. Но вы должны сделать это как осознанное решение.

Кроме того, делайте то, что говорит Пол, и попытайтесь сопоставить входные данные с регулярным выражением, например: ^ [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [ AZ] {2} $

Этот адрес будет совпадать почти с адресом электронной почты каждого.

ответил Brandon Yarbrough 29 AMpWed, 29 Apr 2009 03:04:40 +040004Wednesday 2009, 03:04:40
0

Хотя сосредоточиться на регулярных выражениях хорошо, но это только первый и необходимый шаг. Есть и другие шаги, которые также должны учитываться для хорошей стратегии проверки.

Две вещи на моей голове:

  1. Проверка DNS, чтобы убедиться, что домен действительно существует.

  2. После проверки DNS вы также можете выполнить проверку SMTP. отправить вызов на сервер SMTP посмотрим, существует ли пользователь на самом деле.

Таким образом, вы можете отследить все виды ошибок пользователя и убедиться, что это действительный адрес электронной почты.

ответил Srikar Doddi 29 AMpWed, 29 Apr 2009 03:09:26 +040009Wednesday 2009, 03:09:26
0

Эта функция проста, но проверяет адрес электронной почты более тщательно. Например, в соответствии с RFC2822 адрес электронной почты не должен содержать два периода подряд, например firstname..lastname @ domain..com

Также важно использовать якоря в регулярных выражениях, как показано в этой функции. Без привязок следующий адрес электронной почты считается действительным: first; name) [email protected] (blah , поскольку раздел [email protected] действителен, игнорируя first; name) в начале и (blah в конце. Якоря заставляют механизм регулярных выражений проверять всю электронную почту.

Эта функция использует NSPredicate, который не существует в iOS 2. К сожалению, он может не помочь спрашивающему, но, надеюсь, поможет другим с более новыми версиями iOS. Регулярные выражения в этой функции все еще могут быть применены к RegExKitLite в iOS 2, хотя. А для тех, кто использует iOS 4 или более позднюю версию, эти регулярные выражения могут быть реализованы с помощью NSRegularExpression.

- (BOOL)isValidEmail:(NSString *)email
{
    NSString *regex1 = @"\\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,4}\\z";
    NSString *regex2 = @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*";
    NSPredicate *test1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1];
    NSPredicate *test2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex2];
    return [test1 evaluateWithObject:email] && [test2 evaluateWithObject:email];
}

См. подтверждение адреса электронной почты с помощью регулярного выражения в Objective-C .

ответил Geek 15 +04002013-10-15T04:09:40+04:00312013bEurope/MoscowTue, 15 Oct 2013 04:09:40 +0400 2013, 04:09:40
0
NSString *emailString = textField.text; **// storing the entered email in a string.** 
**// Regular expression to checl the email format.** 
NSString *emailReg = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",emailReg]; 
if (([emailTest evaluateWithObject:emailString] != YES) || [emailStringisEqualToString:@""]) 
{ 
UIAlertView *loginalert = [[UIAlertView alloc] initWithTitle:@" Enter Email in" message:@"[email protected] format" delegate:self 
cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

enter code here

[loginalert show]; 
[loginalert release]; 
} 
If email is invalid, it will remind the user with an alert box. 
Hope this might be helpful for you all. 
ответил hirak 30 FriEurope/Moscow2011-12-30T15:44:56+04:00Europe/Moscow12bEurope/MoscowFri, 30 Dec 2011 15:44:56 +0400 2011, 15:44:56
0

Я обнаружил, что использование регулярного выражения довольно хорошо подходит для проверки адреса электронной почты.

Основным недостатком регулярных выражений, конечно же, является удобство сопровождения, поэтому комментируйте так, как вы никогда раньше не комментировали. Я обещаю вам, если вы этого не сделаете, вы захотите, чтобы вы сделали, когда вы вернетесь к выражению через несколько недель.

Вот ссылка на хороший источник, http: //www.regular-expressions. Информация /email.html .

ответил Paul Redman 29 AMpWed, 29 Apr 2009 02:42:20 +040042Wednesday 2009, 02:42:20
0

Вот расширение String, которое проверяет электронную почту в Swift.

extension String {

    func isValidEmail() -> Bool {
        let stricterFilter = false
        let stricterFilterString = "^[A-Z0-9a-z\\._%+-][email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$"
        let laxString = "^[email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*$"
        let emailRegex = stricterFilter ? stricterFilterString : laxString
        let emailTest = NSPredicate(format: "SELF MATCHES %@", emailRegex)
        return emailTest.evaluate(with: self)
    }
}

Скопировано из ответа на: Проверьте адрес электронной почты действует на iOS

ответил grez 16 FebruaryEurope/MoscowbThu, 16 Feb 2017 22:39:12 +0300000000pmThu, 16 Feb 2017 22:39:12 +030017 2017, 22:39:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132