如何在iPhone上执行密码验证?

3

我有一个应用程序,需要对密码和确认密码进行验证。这是我的密码要求:

  1. 首字母应该是大写的。
  2. 密码应该超过6个字符。
  3. 至少应该有一个特殊字符。
  4. 密码中必须输入至少1个数字。

只有当所有这些标准都满足时,才会接受密码。


这个问题可以使用“过于宽泛:请编辑问题,将其限制为具有足够细节以确定充分答案的特定问题。避免一次性提出多个不同的问题。请参阅如何提问页面以获取帮助澄清此问题。”作为官方关闭原因来关闭。 - halfer
3个回答

11
这应该可以运行:
- (BOOL)passwordIsValid:(NSString *)password {

    // 1. Upper case.
    if (![[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[password characterAtIndex:0]])
        return NO;

    // 2. Length.
    if ([password length] < 6)
        return NO;

    // 3. Special characters.
    // Change the specialCharacters string to whatever matches your requirements.
    NSString *specialCharacters = @"!#€%&/()[]=?$§*'";
    if ([[password componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:specialCharacters]] count] < 2)
        return NO;

    // 4. Numbers.
    if ([[password componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]] count] < 2)
        return NO;

    return YES;
}

测试一下:

NSLog(@"%@", [self passwordIsValid:@"Test#one"] ? @"YES" : @"NO"); // Prints NO.
NSLog(@"%@", [self passwordIsValid:@"Test#1"] ? @"YES" : @"NO"); // Prints YES.

嗨,mortenfast,这段代码仅适用于前三种情况,因为我需要检查的最后一种情况是必须为数字值,并且您传递的是@"0123456789"字符串。请提供一个解决方案。谢谢。 - Rani
你试过了吗? ;) 字符串@"0123456789"用于提供给NSCharacterSet,以便它知道我们认为哪些字符是数字。我不知道除了0-9之外的其他十进制数,所以字符集包含所有有效的数字。如果你用@"Test#1"测试这个方法,它将返回YES,而@"Test#one"将返回NO。 - Morten Fast
我试过了,但只有前三个案例有效。 - Rani
如果我使用没有数字的密码进行测试,该方法返回NO。如果我使用包含数字的密码进行测试,该方法返回YES。我是否误解了第四个标准? - Morten Fast

1
这是代码:你需要做的就是根据你的需求操作正则表达式。
-(IBAction)passwordValidator:(id)sender{
    NSString *pwd=[NSString stringWithString:passwordField.text];
    int lngth=[pwd length]; 
    int minlength=6;

    NSString *regex = @"\\b([a-zA-Z0-9]+)\\b"; 

    NSPredicate * regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    BOOL x= [regextest evaluateWithObject:pwd];

    if (lngth>=minlength) {
        NSLog(@"passoword length is enough");
        if (x==FALSE) {
            //DO something
        }
    }
    else {
        //DO other thing
    }
}

您可以使用以下验证集。


0

使用DHValidation进行所有验证。它更易于使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接