Подтвердить что ты не робот

Каковы наилучшие методы проверки адресов электронной почты в 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];
}
4b9b3361

Ответ 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()

}