如何使用8到15个字符和强密码验证文本字段

时间:2013-04-26 11:13:16

标签: iphone ios validation uitextfield

我有一个文本字段,我想输入密码。我想输入强密码。这意味着8到15个字符,其中至少有一个小写字母,一个大写字母,1个空格字符,一个数字。 请提出建议。

3 个答案:

答案 0 :(得分:5)

使用

password.length

你可以要求字符串的长度。将其与您想要的限制进行比较。

使用

- (BOOL)string:(NSString *)text matches:(NSString *)pattern
{
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];

    NSArray *matches = [regex matchesInString:text options:0 range:NSMakeRange(0, text.length)];

    return matches.count > 0;
}

你有一个为字符串提供正则表达式的方法(你也可以将它作为NSString的类别实现)。

第一个参数是你的密码,第二个参数是模式。

我对正则表达式不太好,所以可能有更好的解决方案,但这将是我的方式

NSString *password = @"iS_bhd97zAA!";
NSString *scPattern = @"[a-z]";
NSString *cPattern = @"[A-Z]";
NSString *sPattern = @"[!%&\._;,]";
NSString *nPattern = @"[0-9]";

if (8 <= password.length && password.length <= 15 &&
    [self string:password matches:scPattern] &&
    [self string:password matches:cPattern] &&
    [self string:password matches:sPattern] &&
    [self string:password matches:nPattern]) 
{
    NSLog(@"PW is valid");
}

<强>提示

特殊字符的正则表达式很棘手,因为你需要逃避一些字符。我的可能是正确的,但我并不十分确定。

还有可能只在一个正则表达式中执行此操作,但这看起来很可怕imo

这一个

 (?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$
除了特殊字符外,

还有其他所有内容,也许你想自己添加:D

答案 1 :(得分:2)

使用正则表达式可以轻松完成此操作。我不熟悉正则表达式,所以我建议这样做。

您可以使用此功能进行检查:

- (BOOL)strongPassword:(NSString *)yourText
{
  BOOL strongPwd = YES;

  //Checking length
  if([yourText length] < 8)
       strongPwd = NO;

  //Checking uppercase characters
  NSCharacterSet *charSet = [NSCharacterSet uppercaseLetterCharacterSet];
  NSRange range = [yourText rangeOfCharacterFromSet:charSet];
  if(range.location == NSNotFound)
      strongPwd = NO;

  //Checking lowercase characters
  charSet = [NSCharacterSet lowercaseLetterCharacterSet];
  range = [yourText rangeOfCharacterFromSet:charSet];
  if(range.location == NSNotFound)
      strongPwd = NO;

  //Checking special characters
  charSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
  range = [yourText rangeOfCharacterFromSet:charSet];
  if(range.location == NSNotFound)
      strongPwd = NO;

  return strongPwd;
}

答案 2 :(得分:-2)

在UITextField的delegate方法textField:shouldChangeCharactersInRange:replacementString:中,您需要执行以下操作:

  • 使用属性myTextField.text
  • 获取文本
  • 检查大写和小写字符数
  • 同样检查特殊字符和数字计数

如果满足所有条件,则处理字段else显示错误。

我会为你写下代码,但它反对SO政策。您尝试编写此代码,如果您遇到困难,您可以随时发布另一个问题。