2014-10-17 82 views
-3

任何人都可以請幫助我,我需要一個正則表達式密碼驗證。密碼驗證的正則表達式Objective-C

條件:密碼應該超過8個字符數字或字母與ATLEAST一個特殊字符

在此先感謝。

+0

你要允許'>'?你試過了什麼? – 2014-10-17 10:52:32

+0

簡單使用字符範圍長度並使用NSScanner進行字符串搜索,查找哪種類型的字符是否存在。 – Tirth 2014-10-17 10:54:08

+0

是的。我們允許任何特殊字符。 – iSuresh 2014-10-17 10:54:50

回答

5
^(?=.{2,8}$)(?=.*?[A-Za-z0-9])(?=.*?[\W_])[\w\W]+ 

這個正則表達式允許2到8個字符的密碼。它要求至少有1個字母數字(字母/數字)字符和1個非字母數字字符。你可以測試它here

如果您想更改所需的最小字符或更高的最大值。只要改變2或8

3

SOLUTION:

-(BOOL)isValidPassword:(NSString *)checkString{ 
NSString *stricterFilterString = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[[email protected]$#!%*?&])[A-Za-z\\[email protected]$#!%*?&]{8,}"; 
NSPredicate *passwordTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stricterFilterString]; 
return [passwordTest evaluateWithObject:checkString]; 
} 

TEST:

NSLog(@"%@", [self isValidPassword:@"[email protected]$235#@df"] ? @"YES" : @"NO"); 

OUTPUT:

YES 
0

夫特3

CHEC k如果密碼長度大於或等於8並且小寫,則爲 大寫字母,十進制數字和特殊字符!@#$%^ & *()_- +爲 可選。

爲什麼我不使用正則表達式?

因爲很難在常規的 表達式語法中支持保留字符。


func isValidated(_ password: String) -> Bool { 
    var lowerCaseLetter: Bool = false 
    var upperCaseLetter: Bool = false 
    var digit: Bool = false 
    var specialCharacter: Bool = false 

    if password.characters.count >= 8 { 
     for char in password.unicodeScalars { 
      if !lowerCaseLetter { 
       lowerCaseLetter = CharacterSet.lowercaseLetters.contains(char) 
      } 
      if !upperCaseLetter { 
       upperCaseLetter = CharacterSet.uppercaseLetters.contains(char) 
      } 
      if !digit { 
       digit = CharacterSet.decimalDigits.contains(char) 
      } 
      if !specialCharacter { 
       specialCharacter = CharacterSet.punctuationCharacters.contains(char) 
      } 
     } 
     if specialCharacter || (digit && lowerCaseLetter && upperCaseLetter) { 
      //do what u want 
      return true 
     } 
     else { 
      return false 
     } 
    } 
    return false 
} 
let isVaildPass:Bool = isValidated("Test**00+-") 
print(isVaildPass)