Swift NSPredicate 评估失败
Swift NSPredicate evaluate fails
我不熟悉使用 Regex 和 NSPredicates。我正在尝试将下面的 objective 代码转换为 swift 但失败并出现以下错误:
'NSInvalidArgumentException', reason: 'Can't do regex matching on
object SELF MATCHES ".+@([A-Za-z0-9-]+\.)+[A-Za-z]{2}[A-Za-z]*".'
Objective 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 代码工作正常,但在 swift 中应用程序崩溃。有人可以帮我解决这个问题吗?
请用这条线测试一下
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)
}
我不熟悉使用 Regex 和 NSPredicates。我正在尝试将下面的 objective 代码转换为 swift 但失败并出现以下错误:
'NSInvalidArgumentException', reason: 'Can't do regex matching on object SELF MATCHES ".+@([A-Za-z0-9-]+\.)+[A-Za-z]{2}[A-Za-z]*".'
Objective 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 代码工作正常,但在 swift 中应用程序崩溃。有人可以帮我解决这个问题吗?
请用这条线测试一下
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)
}