【问题标题】:Email validation not working with textField shouldChangeCharactersInRange电子邮件验证不适用于 textField shouldChangeCharactersInRange
【发布时间】:2014-07-09 05:59:29
【问题描述】:

您好,我想在用户在文本字段中输入文本时验证电子邮件地址。当错误的电子邮件然后显示警报并返回 no 以留在电子邮件文本字段中时,它正在处理返回和文本字段结束编辑,但不适用于 textField shouldChangeCharactersInRange。 如果有人知道如何做请分享它,请提前谢谢。 这是我的验证示例代码作为回报

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    activeTextfield=textField;
    if(activeTextfield==txtCon1Email || activeTextfield==txtCon1SecondMail ||   activeTextfield==txtCon2Email || activeTextfield==txtCon2SecondMail)
  {
     NSString *emailReg = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
     NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailReg];

     if ([emailTest evaluateWithObject:textField.text] == NO)
      {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"OTS" message:@"Please enter valid email address." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];



        isvalidemail=NO;


    }
    else
        isvalidemail=YES;

 }
}

但我想在用户输入文本时执行此操作

【问题讨论】:

  • 为什么要在每个字符的输入时进行验证,字符不是有效的电子邮件。您需要使用textFieldDidEndEditing

标签: ios objective-c email uitextfield


【解决方案1】:

这对于您的情况可能已经足够了:只需尝试使用 textFieldDidEndEditing 仅代表:

-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{
    if ([textField.text length]==0 || [self validateEmailWithString:textField.text]) {
        [textField resignFirstResponder];

    }else{
       [[[UIAlertView alloc] initWithTitle:@"OTS" message:@"Please enter valid email address." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]show];

        [textField becomeFirstResponder];
        return NO;
    }
    return YES;
}

- (BOOL)validateEmailWithString:(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];
}

【讨论】:

  • 谢谢 Kumar KL,它运行良好,再次解决了我的问题
【解决方案2】:

如果您想使用shouldChangeCharactersInRange 方法,请注意每个最后添加的字符 都在replacementString 中,而在输入新字符之前的其余部分都在textField.text 中。

因此,在验证电子邮件时,您需要像这样组合 textField.text 和 replacementString:

请记住,当您使用 textField.text 您会丢失最后一个字符,如果您使用 replacementString 您只会得到最后添加的字符

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 2018-12-13
    • 2015-02-24
    • 2023-03-15
    • 2011-07-22
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多