Regex pattern for strong password

242 Views Asked by At

I am developing one application related to money transaction. So in the user registration screen I want to put strong restriction for password field.

Here, requirement is,

1) Password has must be one small letter, one capital letter, one special char (including all types of special character.).

2) whitespace and number is not compulsory but if user want to enter then accept it,

3) Password length must be greater then 6 char.

Below what I did.

-(BOOL) isPasswordValid:(NSString *)pwd
{
    NSString *password = pwd;
    NSLog(@"Password ==> %@",pwd);
    NSString *scPattern = @"[a-z]";
    NSString *cPattern = @"[A-Z]";

    // !~`@#$%^&*-+();:={}[],\'.<>?\\/\"  
   // @"[@!%&\._;,]" 

    NSString *sPattern = @"^\\w+( +\\w+)*$";

    if ((6 <= password.length) && [self string:password matches:scPattern] && [self string:password matches:cPattern] && [self string:password matches:sPattern])
    {
        return YES;
    }
    else
        return NO;
}

And I calling above function like

if([self isPasswordValid])
{
 /// Your password is valid;
}
else
{
/// Your password is not valid
}

When I am entering like @ Aa123#" but each time I am getting /// Your password is not valid

Anybody have any idea for how can I get expected result? By regex or by any other trick?

Thanks.

1

There are 1 best solutions below

5
On

Please try this

  -(void)textFieldDidEndEditing:(UITextField *)textField{
       int numberofCharacters = 0;
       BOOL lowerCaseLetter,upperCaseLetter,digit,specialCharacter = 0;
       if([textField.text length] >= 6)
       {
          for (int i = 0; i < [textfield.text length]; i++) 
          {
             unichar c = [textfield.text characterAtIndex:i];
             if(!lowerCaseLetter)
             {
               lowerCaseLetter = [[NSCharacterSet lowercaseLetterCharacterSet] characterIsMember:c];
             }
             if(!upperCaseLetter)
             {
               upperCaseLetter = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:c];
             }
             if(!digit)
             {
                digit = [[NSCharacterSet decimalDigitCharacterSet] characterIsMember:c];
             }
             if(!specialCharacter)
             {
                specialCharacter = [[NSCharacterSet symbolCharacterSet] characterIsMember:c];
             }
          }

          if(specialCharacter && digit && lowerCaseLetter && upperCaseLetter)
          {
             //do what u want
          }
          else
          { 
             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                            message:@"Please Ensure that you have at least one lower case letter, one upper case letter, one digit and one special character"
                                                           delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
          }

       }
       else
       {
          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                            message:@"Please Enter at least 6 digit password"
                                                           delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
       }
    }