ios - 체크 - Swift에서 문자열에 적어도 대문자, 숫자 또는 특수 문자가 포함되어 있는지 확인 하시겠습니까?




정규표현식 그룹 (3)

문자열에 숫자, 대문자 및 특수 문자가 포함되어 있는지 여부를 확인하는 메서드를 만들려고합니다. 아래 정규식을 사용합니다.

 func checkTextSufficientComplexity(var text : String) -> Bool{


            let capitalLetterRegEx  = "[A-Z]+"
            var texttest = NSPredicate(format:"SELF MATCHES %@", capitalLetterRegEx)
            var capitalresult = texttest.evaluateWithObject("AniP")
            println("\(capitalresult)")


            let numberRegEx  = "[0-9]+"
            var texttest1 = NSPredicate(format:"SELF MATCHES %@", numberRegEx)
            var numberresult = texttest1.evaluateWithObject(text)
            println("\(numberresult)")


            let specialCharacterRegEx  = "[.*&^%$#@()/]+"
            var texttest2 = NSPredicate(format:"SELF MATCHES %@", numberRegEx)

            var specialresult = texttest2.evaluateWithObject(text)
            println("\(specialresult)")

           return capitalresult && numberresult && specialresult

    }

문제는 아래의 정규 표현식입니다 [AZ] +는 예를 들어 AVATAR에 대해서만 true를 반환하고 Avatar에 대해서는 false를 반환합니다. String에 적어도 하나 이상의 UpperCase가 포함되어 있으면 정규식이 true를 반환하도록하고 싶습니다.


RegEx 규칙 [AZ] +. * [AZ] +. * (및 기타 RegEx 규칙도 함께)

규칙

[AZ] +는 모든 문자가 대문자 인 문자열 만 찾습니다.

예 : AVATAR, AVA, TAR, AAAAAA
작동하지 않음 : AVATAr

. *는 모든 문자열과 일치합니다 (0 자 이상).

예 : 1, 2, AVATAR, AVA, TAR, a, b, c

. * [AZ] +. *는 적어도 하나의 대문자가있는 모든 문자열을 찾습니다

예 : 아바타, avataR, 아바타

설명:

I.. *는 0 개 이상 일치하도록 시도합니다.
II. [AZ] +는 대문자가 하나 이상 필요합니다 (+ 때문에)
III. . *는 0 개 이상 일치하도록 시도합니다.

아바타 [빈 | "A"| "vatar"]
아바타 [ "a"| "V"| "atar"]
aVAtar [ "a"| "VA"| "타르"]

작업 코드

func checkTextSufficientComplexity(var text : String) -> Bool{


    let capitalLetterRegEx  = ".*[A-Z]+.*"
    var texttest = NSPredicate(format:"SELF MATCHES %@", capitalLetterRegEx)
    var capitalresult = texttest!.evaluateWithObject(text)
    println("\(capitalresult)")


    let numberRegEx  = ".*[0-9]+.*"
    var texttest1 = NSPredicate(format:"SELF MATCHES %@", numberRegEx)
    var numberresult = texttest1!.evaluateWithObject(text)
    println("\(numberresult)")


    let specialCharacterRegEx  = ".*[!&^%$#@()/]+.*"
    var texttest2 = NSPredicate(format:"SELF MATCHES %@", specialCharacterRegEx)

    var specialresult = texttest2!.evaluateWithObject(text)
    println("\(specialresult)")

    return capitalresult || numberresult || specialresult

}

예 :

checkTextSufficientComplexity("Avatar") // true || false || false
checkTextSufficientComplexity("avatar") // false || false || false
checkTextSufficientComplexity("avatar1") // false || true || false
checkTextSufficientComplexity("avatar!") // false || false || true

다른 대안.

하나의 정규 표현식을 사용하여 모든 검사를 수행 할 수 있습니다.

RegExp: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{8,}

아래에서 언급 한대로 사용할 수 있습니다.

//Minimum 8 characters at least 1 Uppercase Alphabet, 1 Lowercase Alphabet, 1 Number and 1 Special Character:
let regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[[email protected]$!%*?&])[A-Za-z\\[email protected]$!%*?&]{8,}"
let isMatched = NSPredicate(format:"SELF MATCHES %@", regex).evaluate(with: yourTextField.text)
if(isMatched  == true) {
    // Do your stuff ..
}  else {
    // Show Error Message.
}

최소 1 대문자, 1 소문자, 1 특수 문자, 1 숫자 및 총 8 문자.

https://www.owasp.org/index.php/Password_special_characters 나열된 모든 특수 문자를 지원하려면

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

extension String {
    func isValidPassword() -> Bool {
        //let passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[ !\"\\\\#$%&'()*+,-./:;<=>[email protected]\\[\\]^_`{|}~])[A-Za-z\\d !\"\\\\#$%&'()*+,-./:;<=>[email protected]\\[\\]^_`{|}~]{8,}"
        //safe to escape all regex chars
        let passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[ !\"\\\\#$%&'\\(\\)\\*+,\\-\\./:;<=>[email protected]\\[\\]^_`\\{|\\}~])[A-Za-z\\d !\"\\\\#$%&'\\(\\)\\*+,\\-\\./:;<=>[email protected]\\[\\]^_`\\{|\\}~]{8,}"
        return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: self)
    }
}




swift