如何检查UITextField的文本是否是有效的电子邮件?

7 iphone cocoa-touch objective-c nsstring uitextfield

我有一个带有3个UITextFields(用户名,电子邮件和密码)的视图控制器.

我需要一个首先检查的方法,如果所有字段都包含文本,那么检查电子邮件的文本字段是否是有效的电子邮件,也许通过检查它是否有@符号.有人能帮忙吗?

Nim*_*ekh 6

以下代码用于使用Regex(常规表达)检查电子邮件ID的验证.

(BOOL) validateEmail: (NSString *) candidate {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; //  return 0;
    return [emailTest evaluateWithObject:candidate];
}
Run Code Online (Sandbox Code Playgroud)


cho*_*own 5

这将检查UITextField是否有正确的电子邮件。
将此方法添加到textFields 委托中,然后检查是否应添加要更改的字符。
返回YESNO根据文本字段将当前文本与有效的电子邮件地址进行比较:

#define ALPHA                   @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
#define NUMERIC                 @"1234567890"
#define ALPHA_NUMERIC           ALPHA NUMERIC

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSCharacterSet *unacceptedInput = nil;
    if ([[textField.text componentsSeparatedByString:@"@"] count] > 1) {
        unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".-"]] invertedSet];
    } else {
        unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:[ALPHA_NUMERIC stringByAppendingString:@".!#$%&'*+-/=?^_`{|}~@"]] invertedSet];
    }
    return ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1);
}  
Run Code Online (Sandbox Code Playgroud)

要检查文本字段是否为空或仅if (myTextField.text.length > 0) {}在视图控制器中的任何地方使用。


tim*_*imv 5

我使用了Mimit的解决方案,但修改了emailRegex以允许更长的名称,如博物馆.所以最后的大括号现在说{2,6}不是{2,4}.我用更长的名字测试它,它的工作原理.感谢Mimit提供简单的解决方案.

-(BOOL) validateEmail: (NSString *) candidate {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];    //  return 0;
   return [emailTest evaluateWithObject:candidate];
}
Run Code Online (Sandbox Code Playgroud)