1

用户可以在一个文本字段中输入电子邮件 ID 或电话。如果用户编号输入电子邮件 ID,则验证电子邮件。如果用户输入电话,则验证电话号码。验证应仅在一个文本字段中完成。我知道电子邮件 ID 和电话号码验证以及方法

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

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

4

6 回答 6

3

如果NSString来自的对象textfield包含字符@,则它是一封电子邮件,否则不是。此外,我们还可以检查字符串是否包含=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
  }
于 2013-09-16T06:59:38.460 回答
1

用户可以同时输入,但你不知道他实际上想输入什么。

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

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

于 2013-09-16T07:00:49.693 回答
0

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

- (BOOL) isTextValid: (NSString *) text
{
    return [self isPhoneNumberValid: text] || [self isEmailValid: text];
}
于 2013-09-16T07:01:04.740 回答
0

您可能需要检查 if...else 条件。

如果输入的单词有@字符,则进行电子邮件ID验证,否则进行电话验证。

于 2013-09-16T07:07:44.917 回答
0

看来你们都把我的问题弄错了。我终于像这样解决了。我必须在 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

    }
于 2013-09-20T07:36:02.090 回答
0

UITextfield 文本的验证使用此方法

  • (void)textFieldDidEndEditing:(UITextField *)textField 因为

每次用户键入键盘时调用的 shouldChangeCharactersInRange 方法

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

    如果(textField.tag = 1){

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

    返回成功;

    }别的{

    返回失败;}

}

}

于 2013-09-16T09:23:43.450 回答