【问题标题】:iOS : Email ID as well as phone number evaluation in one text fieldiOS:一个文本字段中的电子邮件 ID 和电话号码评估
【发布时间】:2013-09-20 15:50:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios validation uitextfielddelegate


    【解决方案1】:

    如果来自textfieldNSString 对象包含字符@,则它是一封电子邮件,否则不是。此外,我们还可以检查字符串是否包含=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
      }
    

    【讨论】:

    • 您可以在 if 子句中加入该代码。没有必要再开始另一个 if 条件。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我觉得做不到。我只需要创建两个单独的文本字段。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        UITextfield 文本的验证使用此方法

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

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

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

          if(textField.tag = 1){

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

          返回成功;

          }其他{

          返回失败; }

        }

        }

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-12-22
            • 1970-01-01
            • 1970-01-01
            • 2018-05-05
            • 2020-04-05
            • 2014-04-25
            • 1970-01-01
            相关资源
            最近更新 更多