【问题标题】:Password validation in UITextField in iOS 10 --> Objective CiOS 10 中 UITextField 中的密码验证 --> Objective C
【发布时间】:2017-09-28 15:53:49
【问题描述】:

我的 iPhone 应用程序中有 1 个用于密码的 UITextfield。

我想通过以下验证来验证此文本字段。

必须至少为 6 个字符

必须至少包含一个英文字母、一个数字和剩余全部

特殊字符是可选的(即不是强制性的)

如何限制具有上述要求的 UITextField。请任何人帮助我做到这一点..

【问题讨论】:

  • 你可以自己找到这个问题的答案。不要问这类问题。这样的答案已经太多了

标签: ios objective-c regex validation passwords


【解决方案1】:

受 Vamshi Krishna 回答的启发,我认为它可以更简单。

decimalDigitCharacterSet 可以匹配任何数字字符。由于OP的意图没有提到大写问题,所以letterCharacterSet在这里应该足够了。

仅供参考:

BOOL ValidatePassword(NSString *candidate)
{
    if (candidate.length < 6) {
        return NO;
    }

    BOOL foundLetter = [candidate rangeOfCharacterFromSet:NSCharacterSet.letterCharacterSet].location != NSNotFound;
    BOOL foundDigit = [candidate rangeOfCharacterFromSet:NSCharacterSet.decimalDigitCharacterSet].location != NSNotFound;

    return foundLetter && foundDigit;
}

【讨论】:

    【解决方案2】:

    试试这个:

    -(BOOL)isValidPasswordWithText:(UITextField *)textfield{
    
        NSString *regex1 = @"^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d$@$!%*#?&]{6,}$";
        NSPredicate *test1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1];
        return [test1 evaluateWithObject:textfield.text] ;
    }
    

    【讨论】:

    • @Sivaram Yadav 你检查了吗?
    【解决方案3】:

    下面是我使用 RegEx 时使用的内容

    NSString *passwordRegex = @"^.*(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$!&]).*$";
    NSPredicate *passwordTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", passwordRegex];
    
    
    if (![passwordTest evaluateWithObject:passwordTF.text]) {
        // Password must be at least 6 character, containing lowercase letter, one uppercase letter, digits, and special character (!@#$&)
    }
    

    【讨论】:

      【解决方案4】:

      使用此方法验证您的密码:

      -(BOOL) isPasswordValid:(NSString *)password {
          NSCharacterSet *upperCaseChars = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLKMNOPQRSTUVWXYZ"];
          NSCharacterSet *lowerCaseChars = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz"];
          //NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
      
          if ( [password length]<7 )
              return NO;  //too short
          NSRange range;
          range = [password rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
          if ( !range.length )
              return NO;  // no letter
          range = [password rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];
          if ( !range.length )
              return NO;  // no number;
          range = [password rangeOfCharacterFromSet:upperCaseChars];
          if ( !range.length )
              return NO;  // no uppercase letter;
          range = [password rangeOfCharacterFromSet:lowerCaseChars];
          if ( !range.length )
              return NO;  // no lowerCase Chars;
      
          return YES;
      }
      

      【讨论】:

      • 嘿 Sivaram,很高兴它对你有用。请投上一票,并在您的问题得到解决后单击对勾!
      猜你喜欢
      • 2013-02-14
      • 2014-02-12
      • 1970-01-01
      • 2013-10-22
      • 2014-12-12
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 2015-03-18
      相关资源
      最近更新 更多