2017-02-08 22 views
-1

Я новичок в использовании Regex и NSPredicates. Я пытаюсь преобразовать ниже объектного кода для быстрой и он терпит неудачу с ошибкой при слежении:Оценка Swift NSPredicate не удалась

'NSInvalidArgumentException', reason: 'Can't do regex matching on object SELF MATCHES "[email protected]([A-Za-z0-9-]+\.)+[A-Za-z]{2}[A-Za-z]*".'

Цель код C:

- (BOOL)validateEmailWithString:(NSString*)userEmail 
{ 
    BOOL stricterFilter = NO; 
    NSString *stricterFilterString = @"[A-Z0-9a-z\\._%+-][email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}"; 
    NSString *laxString = @"[email protected]([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*"; 
    NSString *emailRegex = stricterFilter ? stricterFilterString : laxString; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
    return [emailTest evaluateWithObject:userEmail]; 
} 

Эквивалент Swift Code

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

Исключение происходит в этой строке:

return emailTest.evaluate(with: emailTest) 

Объективный код C работает нормально, но при быстром отключении приложения. Может кто-нибудь, пожалуйста, помогите мне с этим?

+2

'оценить ... userEmail' против' оценить ... emailTest' – vadian

+0

Вы найдете ответ на свой вопрос здесь HTTP : //stackoverflow.com/questions/25471114/how-to-validate-an-e-mail-address-in-swift Приветствия –

+0

@vadian Спасибо, что указали на проблему. Моя вина! –

ответ

0

Пожалуйста использовали эту линию и проверить его

let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}" 

let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) 
return emailTest.evaluateWithObject(userEmail) 
0

попробовать это

func validateEmailWithString(checkString : String) -> Bool { 

    let emailFormat = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" 
    let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat) 
    return emailPredicate.evaluate(with: checkString) 
}