iOS:在一个文本字段中评估电子邮件ID和电话号码

iOS:在一个文本字段中评估电子邮件ID和电话号码,ios,validation,uitextfielddelegate,Ios,Validation,Uitextfielddelegate,用户可以在一个文本字段中输入电子邮件id或电话。如果用户号码输入电子邮件id,则电子邮件将被验证。如果用户输入phone,则验证电话号码。验证只能在一个文本字段中进行。我知道电子邮件id和电话号码验证以及方法 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 如何检测用户是否输入电子邮件id或电话

用户可以在一个文本字段中输入电子邮件id或电话。如果用户号码输入电子邮件id,则电子邮件将被验证。如果用户输入phone,则验证电话号码。验证只能在一个文本字段中进行。我知道电子邮件id和电话号码验证以及方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

如何检测用户是否输入电子邮件id或电话,然后进行相应的验证

如果
textfield
中的
NSString
对象包含字符@,则它是电子邮件,否则它不是。此外,我们还可以检查字符串是否包含d=s十个字符,并且所有字符都是用于电话验证的数字

您可以使用以下代码查找@字符

  NSString *str = self.textField.text;
  NSRange range = [str rangeOfString:@"@"];
  if (range.location != NSNotFound)
  {
    // it is an email
  }
  else if(str.length == 10 && [str rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]].location != NSNotFound) {
    // it is a phone
  }
  else{
    // it is neither of the two
  }

如果
textfield
中的
NSString
对象包含字符@,则它是电子邮件,否则它不是。此外,我们还可以检查字符串是否包含d=s十个字符,并且所有字符都是用于电话验证的数字

您可以使用以下代码查找@字符

  NSString *str = self.textField.text;
  NSRange range = [str rangeOfString:@"@"];
  if (range.location != NSNotFound)
  {
    // it is an email
  }
  else if(str.length == 10 && [str rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]].location != NSNotFound) {
    // it is a phone
  }
  else{
    // it is neither of the two
  }

用户可以同时输入这两项,但您不知道他实际上想输入什么

我建议您应用这两种验证。如果其中一个成功了,你知道他进入了什么,你可以继续


编辑:阅读其他答案我认为检查“@”字符不是一个好主意,因为用户可能错误地输入了该字符(即按了数字2),并且您将应用错误的验证。用户可以同时输入这两个字符,但您不知道他实际上要输入什么

我建议您应用这两种验证。如果其中一个成功了,你知道他进入了什么,你可以继续


编辑:阅读其他答案我认为检查“@”字符不是一个好主意,因为用户可能没有错误地输入该字符(即按数字2),并且您将应用错误的验证。我认为您应该编写两个验证程序,并检查其中一个是否成功完成

- (BOOL) isTextValid: (NSString *) text
{
    return [self isPhoneNumberValid: text] || [self isEmailValid: text];
}

我认为您应该编写两个验证器,并检查其中一个是否成功完成

- (BOOL) isTextValid: (NSString *) text
{
    return [self isPhoneNumberValid: text] || [self isEmailValid: text];
}

您可能需要检查if…else条件

如果输入的word具有@字符,请进行电子邮件id验证
else进行电话验证。

您可能需要检查if…else条件

如果输入的word具有@字符,请进行电子邮件id验证
否则请进行电话验证。

使用此方法验证UITextfield文本

  • (void)textfielddidediting:(UITextField*)textField因为
每当用户键入键盘时,每次调用CharactersRange方法时都应更改它

  • (void)textfielddidediting:(UITextField*)textField{

    如果(textField.tag=1){

    if([self-isValidPhoneNumber]| |[self-isValidEmail]){

    回归成功

    }否则{

    返回失败; }

}


}

UITextfield文本的验证使用此方法

  • (void)textfielddidediting:(UITextField*)textField因为
每当用户键入键盘时,每次调用CharactersRange方法时都应更改它

  • (void)textfielddidediting:(UITextField*)textField{

    如果(textField.tag=1){

    if([self-isValidPhoneNumber]| |[self-isValidEmail]){

    回归成功

    }否则{

    返回失败; }

}


}你们所有人似乎都把我的问题搞错了。 我终于这样解决了。我必须在emailIdTextField中验证这两个(电子邮件id和电话号码)

NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
     NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];

     NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}$";
     NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];

    if([emailTest evaluateWithObject:self.emailTextField.text] == NO && [phoneTest evaluateWithObject:self.emailTextField.text] == NO)
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Can't login" message:@"Please enter a valid email id / phone no. (abc@xyz.com OR +11234567890)" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

        [alertView show];

    }

    else
    {
        //login successful

    }

你们似乎都把我的问题搞错了。 我终于这样解决了。我必须在emailIdTextField中验证这两个(电子邮件id和电话号码)

NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
     NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];

     NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}$";
     NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];

    if([emailTest evaluateWithObject:self.emailTextField.text] == NO && [phoneTest evaluateWithObject:self.emailTextField.text] == NO)
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Can't login" message:@"Please enter a valid email id / phone no. (abc@xyz.com OR +11234567890)" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

        [alertView show];

    }

    else
    {
        //login successful

    }

您可以在if子句中使用该代码。没有必要启动另一个if条件。您可以在if子句中加入该代码。没有必要启动另一个if条件。我认为这是不可能的。我只需要创建两个单独的文本字段,我想这是不可能的。我只需要创建两个单独的文本字段。