Кто-нибудь знает, как проверить адрес электронной почты в Swift? Я нашел этот код:
- (BOOL) validEmail:(NSString*) emailString {
if([emailString length]==0){
return NO;
}
NSString *regExPattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
NSLog(@"%i", regExMatches);
if (regExMatches == 0) {
return NO;
} else {
return YES;
}
}
но я не могу перевести его на Свифт.
ios
validation
email
swift
Джорджо Ночера
источник
источник
.coffee
Ответы:
Я бы использовал
NSPredicate
:для версий Swift ранее 3.0:
для версий Swift ранее 1.2:
источник
return emailTest.evaluateWithObject(testStr)
будет намного проще и удобочитаемее? По сравнению с== true
это немного похоже на Javascript.Редактирование, обновлено для Swift 3:
Оригинальный ответ для Swift 2:
Работает нормально.
источник
Как
String
расширение классаSWIFT 4
использование
источник
countElements
сейчасcount
Если вы ищете чистое и простое решение для этого, вы должны взглянуть на https://github.com/nsagora/validation-components .
Он содержит предикат проверки электронной почты, который легко интегрируется в ваш код:
За кулисами используется RFC 5322 reg ex ( http://emailregex.com ):
источник
Вот разумное решение:
"РАЗУМНОЕ РЕШЕНИЕ"
Используется и проверяется годами во многих приложениях огромного объема.
1 - это позволяет избежать многих ужасных ошибок регулярных выражений, которые вы часто видите в этих предложениях
2 - он НЕ допускает глупые электронные письма, такие как «x @ x», которые считаются действительными в определенных RFC, но совершенно глупы, не могут использоваться в качестве электронных писем, и которые ваши сотрудники службы поддержки будут отклонять немедленно, и которые все почтовые сервисы (mailchimp, google, aws и т. д.) просто отклоняются. Если (по какой-то причине) вам нужно решение, которое допускает такие строки, как 'x @ x', используйте другое решение.
3 - код очень и очень понятен
4 - это KISS, надежный и проверенный на разрушение в коммерческих приложениях с огромным количеством пользователей
5 - техническая точка зрения, предикат является глобальным, как Apple утверждает, что это должно быть (следите за предложениями кода, у которых этого нет)
Это так просто.
Объяснение:
В последующем описании «OC» означает обычный символ - букву или цифру.
__firstpart ... должен начинаться и заканчиваться OC. Для символов в середине у вас могут быть определенные символы, такие как подчеркивание, но начало и конец должны быть OC. (Однако это нормально , чтобы иметь только одну ОС , и это его, например: j@blah.com)
__serverpart ... У вас есть такие разделы, как "бла". которые повторяют . (Так что типа mail.city.fcu.edu.) Разделы должны начинаться и заканчиваться OC, но в середине вы также можете иметь тире "-". (Если вы хотите, чтобы другие необычные символы были там, возможно, подчеркивание, просто добавьте перед чертой.) Хорошо иметь раздел, который является только одним OC. (Как в joe@w.campus.edu) У вас может быть до пяти разделов, у вас должен быть один. Наконец, TLD (например, .com) строго от 2 до 8 дюймов размер. Очевидно, просто измените эту цифру «8», как предпочитает ваша служба поддержки.
ВАЖНЫЙ !
Вы должны хранить предикат как глобальный, не создавайте его каждый раз.
Обратите внимание, что это первое, что Apple упоминает о всей проблеме. в документации.
Это очень удивительно, когда вы видите предложения, которые не кэшируют предикат.
источник
Вот сочетание двух самых популярных ответов с правильным регулярным выражением: расширение String с использованием предиката, поэтому вы можете вызвать string.isEmail
источник
Самый простой способ в Swift 5
пример
возвращается ...
источник
Я бы предложил использовать его как расширение строки:
И использовать это:
источник
Это обновленная версия для Swift 2.0 - 2.2
источник
Здесь есть много правильных ответов, но многие из «регулярных выражений» являются неполными, и может случиться так, что электронное письмо типа: «name @ domain» приводит к действительному письму, но это не так. Вот полное решение:
источник
Вот метод, основанный на
rangeOfString
:Примечание: обновлена длина TLD.
Вот окончательный RegEx для электронной почты согласно RFC 5322, обратите внимание, что это лучше не использовать, потому что он только проверяет основной синтаксис адресов электронной почты и не проверяет, существует ли домен верхнего уровня.
Смотрите Regular-Expressions.info для более полной информации по электронной почте RegExs.
Обратите внимание, что экранирование не требуется, как того требует язык, такой как Objective-C или Swift.
источник
.engineer
существуют подобные домены .Я предпочитаю использовать расширение для этого. Кроме того, этот URL http://emailregex.com может помочь вам проверить правильность регулярного выражения. Фактически, сайт предлагает различные реализации для некоторых языков программирования. Я делюсь своей реализацией для Swift 3 .
источник
Для Swift 2.1: это работает правильно с электронной почтой foo @ bar
источник
Использование Swift 4.2
И использовал
источник
Это новая версия « РАЗУМНОГО РЕШЕНИЯ» от @Fattie, протестированная на Swift 4.1 в новом файле с именем
String+Email.swift
:Поэтому его использование простое:
Я просто не люблю добавлять объекты
func
кString
объектам, поскольку им присущ адрес электронной почты (или нет). Таким образом,Bool
собственность будет соответствовать лучше, чемfunc
, насколько я понимаю.источник
Создать простое расширение:
Пример:
Вы можете расширить следующее расширение на все, что вам нужно:
isValidPhoneNumber
иisValidPassword
т.д ...источник
NSRange
свойство length следует использоватьString
utf16.count
вместоcharacters.count
В Swift 4.2 и Xcode 10.1
Если вы хотите использовать SharedClass.
И вызвать функцию, как это ....
источник
Я сделал библиотеку, предназначенную для проверки входных данных, и один из «модулей» позволяет легко проверять кучу вещей ...
Например, чтобы подтвердить адрес электронной почты:
SwiftCop - это библиотека ... надеюсь, это поможет!
источник
Вот расширение в Swift 3
Просто используйте это так:
источник
Поскольку сейчас существует так много странных доменных имен верхнего уровня, я перестаю проверять длину верхнего домена ...
Вот что я использую:
источник
Кажется, тоже работает ...
источник
Обновленный ответ @Arsonik ответ на Swift 2.2, использующий меньше подробного кода, чем другие предлагаемые решения:
источник
Ответ @ JeffersonBe близок, но возвращается,
true
если строка является «чем-то, содержащим кем-то@something.com действительный адрес электронной почты», а это не то, что нам нужно. Ниже приведено расширение для String, которое работает хорошо (и позволяет проверить наличие действительного phoneNumber и других детекторов данных для загрузки.источник
И для Свифта 3 :
источник
Моим единственным дополнением к списку ответов было бы то, что для Linux
NSRegularExpression
не существует, это на самом делеRegularExpression
Это успешно компилируется как в MacOS, так и в Ubuntu.
источник
Лучшее решение с лучшим результатом для
источник
Мне нравится создавать расширение
использование:
источник
Swift 5
Затем:
источник
Идеальный Regex, как Google Email
источник
Или вы можете иметь расширение для необязательного текста UITextField:
как пользоваться:
расширение:
источник