繁体   English   中英

Swift NSPredicate 评估失败

[英]Swift NSPredicate evaluate fails

我是使用 Regex 和 NSPredicates 的新手。 我正在尝试将以下目标代码转换为 swift 并且失败并出现以下错误:

'NSInvalidArgumentException',原因:'不能对对象 SELF MATCHES 进行正则表达式匹配 ".+@([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\\._%+-]+@([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];
}

等效的 Swift 代码

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)
    }

在这一行发生异常:

return emailTest.evaluate(with: emailTest)

Objective C 代码工作正常,但很快应用程序崩溃。 有人可以帮我解决这个问题吗?

请使用这条线并测试它

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)

尝试这个

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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM