2015-06-11 5 views
-2

Я разрабатываю одно приложение, связанное с транзакцией денег. Поэтому на экране регистрации пользователя я хочу установить сильное ограничение на пароль.Регулярное выражение для надежного пароля

Здесь требование,

1) Пароль должен должен быть один строчная, одна заглавная буква, один специальный символ (включая все виды специального символа.).

2) пробел и номер не является обязательным, но если пользователь хочет ввести затем принять его,

3) Длина пароля должна быть больше 6 полукокса.

Ниже, что я сделал.

-(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; 
} 

И звоню выше функции, как

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

Когда я вхожу, как @ Aa123#", но каждый раз, когда я получаю /// Your password is not valid

Кто-нибудь есть какие-либо идеи о том, как я могу получить ожидаемый результат? По регулярному выражению или любым другим трюком?

Спасибо.

+0

'spattern' всегда будет терпеть неудачу на' специальной characters' – vks

+0

Да, я попытался так много топот за это, но не получает результата. У вас есть идея? Тогда, пожалуйста, поделитесь здесь. Спасибо :) – iPatel

+0

Сделайте spurntern как '^ \\ S + (+ \\ S +) * $' – vks

ответ

2

Пожалуйста, попробуйте это

-(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]; 
     } 
    } 
+0

Можете ли вы предоставить символы в наборе 'symbolCharacterSet'? – zaph

+0

Его предопределено в библиотеке Foundation с файлом NSCharacterSet.h для получения дополнительной информации о регулярном выражении, любезно перейдите в этот учебник https://nilangshah.wordpress.com/2007/06/26/password-validation-via-regular-expression/ – iphonemaclover

+0

'NSCharacterSet.h' не предоставляет информацию о том, какие символы заданы' symbolCharacterSet', это был вопрос в приведенном выше комментарии. Кажется, это немного опасно, если персонажи не известны. Что это за персонажи? – zaph