Каковы наилучшие методы проверки адресов электронной почты в Swift?
Я ищу самый простой и чистый метод для проверки электронной почты (String) в Swift. В Objective-C я использовал этот метод, но если я переписал его в Swift, я получаю сообщение об ошибке "Невозможно проанализировать строку формата" при создании предиката.
- (BOOL) validateEmail: (NSString *) candidate {
NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:candidate];
}
Ответы
Ответ 1
Кажется довольно простым. Если у вас возникли проблемы с преобразованием Swift, если может быть полезно посмотреть, что вы на самом деле пробовали.
Это работает для меня:
func validateEmail(candidate: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(candidate)
}
validateEmail("[email protected]") // true
validateEmail("[email protected]@google.com") // false
Ответ 2
версия Swift 3.0
func validateEmail(candidate: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: candidate)
}
validateEmail("[email protected]") // true
validateEmail("[email protected]@google.com") // false
Ответ 3
extension String
{
func isEmail() -> Bool
{
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(self)
}
}
Ответ 4
Просто собираюсь бросить мои два цента здесь и поразить вас кривой шара:
Вы действительно хотите подтвердить свой адрес электронной почты таким образом?
Смотрите blogpost, в котором говорится, что все, что вам нужно сделать, чтобы проверить, что письмо действительно, - это проверить, что у него есть @
или не более, чем @
, а затем в какой-то момент .
:
/[email protected]+\..+/i
Ответ 5
Вот расширение, которое работает для каждого домена электронной почты.
Пример: .com
, .co.uk
, .co.in
и т.д.
extension String {
func isValidEmail() -> Bool {
let emailRegEx = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailTest.evaluateWithObject(self)
}
}
Ответ 6
class func isValidEmail(email:String)-> Bool
{
let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
var emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
let result = emailTest!.evaluateWithObject(email)
return result
}
Ответ 7
Ответ Craigs работает, и если кто-то пытается его реализовать, здесь он вызывает функцию textFieldDidEndEditing. (Требуется UITextFieldDelegate)
func textFieldDidEndEditing(textField: UITextField)
{
if validateEmail(emailAddress.text)
{
println("valid")
}
else
{
println("NOT valid")
}
}
func validateEmail(candidate: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(candidate)
}
Ответ 8
func isValidEmail(testStr: String) -> Bool {
print("valid Email-ID: \(testStr)")
let emailRegEx = "[A-Za-z0-9_%+-][email protected][A-Za-z0-9._]+\\.[A-Za-z]{2,}"
let emailTest = NSPredicate(format: "SELF MATCHES %@",emailRegEx)
return emailTest.evaluateWithObject(testStr)
}
func textFieldDidEndEditing(textField: UITextField) {
if isValidEmail(txt_EmailID.text!){
print("Email is Valid")
}else{
print("Email is not valid")
}
}
// creat done button outlet
@IBAction func btn_Done(sender: AnyObject) {
validated()
}