-1

I'm new to using Regex and NSPredicates. I'm trying to convert below objective code to swift and it fails with following error:

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

Objective C code:

- (BOOL)validateEmailWithString:(NSString*)userEmail
{
    BOOL stricterFilter = NO;
    NSString *stricterFilterString = @"[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}";
    NSString *laxString = @".+@([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];
}

Equivalent Swift Code

func validateEmail(withString userEmail: String) -> Bool {
        let stricterFilter: Bool = false
        let stricterFilterString: String = "[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}"
        let laxString: String = ".+@([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)
    }

Exception occurs at this line:

return emailTest.evaluate(with: emailTest)

Objective C code works fine, but in swift the app crashes. Can someone please help me with this?

Abhishek Harsha
  • 257
  • 4
  • 18

2 Answers2

0

Please used this line and test it

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

let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailTest.evaluateWithObject(userEmail)
Sunil Prajapati
  • 473
  • 5
  • 17
0

try this

func validateEmailWithString(checkString : String) -> Bool {

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