- (BOOL)isValidateEmail:(NSString *)email {
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}
代碼邏輯正確,正則表達式符合 RFC 5322 簡化規則,但在實際輸入時驗證失敗。
SELF MATCHES 要求整個字符串完全匹配,任何多餘字符導致失敗。- (BOOL)isValidateEmail:(NSString *)email {
// 關鍵:去除首尾空白字符(空格、換行、制表符等)
email = [email stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}
@"^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"
RegexKitLite、Validator,處理邊界情況更全面。UITextFieldDelegate 的 textField:shouldChangeCharactersInRange:replacementString: 中禁止輸入空格,或實時 Trim 顯示。正則驗證失效 90% 因「髒數據」。永遠記住:驗證前先清洗輸入。`stringByTrimmingCharactersInSet:` 是你的好朋友。