检查一个字符串是否至少包含一个在Swift中的upperCase字母,数字或特殊字符?

LC *_*C 웃 16 regex ios swift

我正在尝试创建一个方法,用于查找字符串是否包含数字,大写字母和使用正则表达式的特殊字符,如下所示

 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

    }
Run Code Online (Sandbox Code Playgroud)

问题是下面的正则表达式[AZ] +仅返回true,例如AVATAR,并为Avatar返回false.我希望我的正则表达式返回true,如果它在String中包含至少一个UpperCase.

Jos*_*Lat 35

只需将您的RegEx规则[AZ] +替换为.*[AZ] +.*(以及其他RegEx规则)

规则

[AZ] +仅匹配所有字符大写的字符串

示例:AVATAR,AVA,TAR,AAAAAA
不起作用:AVATAr

.*匹配所有字符串(0+个字符)

例子:1,2,AVATAR,AVA,TAR,a,b,c

.*[AZ] +.*匹配所有至少包含一个大写字母的字符串

示例:阿凡达,avataR,aVatar

说明:

I.*将尝试匹配任何
II的0或更多.[AZ] +将需要至少一个大写字母(因为+)
III..*将尝试匹配0或更多的任何东西

头像[空| "A"| "vatar"]
aVatar ["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

}
Run Code Online (Sandbox Code Playgroud)

例子:

checkTextSufficientComplexity("Avatar") // true || false || false
checkTextSufficientComplexity("avatar") // false || false || false
checkTextSufficientComplexity("avatar1") // false || true || false
checkTextSufficientComplexity("avatar!") // false || false || true
Run Code Online (Sandbox Code Playgroud)


cro*_*roX 10

以下是Swift 3中Joshuas答案的简明版本,假设必须满足所有验证.

func validate(password: String) -> Bool {
    let capitalLetterRegEx  = ".*[A-Z]+.*"
    let texttest = NSPredicate(format:"SELF MATCHES %@", capitalLetterRegEx)
    guard texttest.evaluate(with: password) else { return false }

    let numberRegEx  = ".*[0-9]+.*"
    let texttest1 = NSPredicate(format:"SELF MATCHES %@", numberRegEx)
    guard texttest1.evaluate(with: password) else { return false }

    let specialCharacterRegEx  = ".*[!&^%$#@()/_*+-]+.*"
    let texttest2 = NSPredicate(format:"SELF MATCHES %@", specialCharacterRegEx)
    guard texttest2.evaluate(with: password) else { return false }

    return true
}
Run Code Online (Sandbox Code Playgroud)


Pat*_*k R 5

另一种替代解决方案。

您可以使用一个正则表达式完成所有检查。

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

您可以将其用作下面提到的:

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


jpu*_*til 5

至少 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)(?=.*[ !\"\\\\#$%&'()*+,-./:;<=>?@\\[\\]^_`{|}~])[A-Za-z\\d !\"\\\\#$%&'()*+,-./:;<=>?@\\[\\]^_`{|}~]{8,}"
        //safe to escape all regex chars
        let passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[ !\"\\\\#$%&'\\(\\)\\*+,\\-\\./:;<=>?@\\[\\]^_`\\{|\\}~])[A-Za-z\\d !\"\\\\#$%&'\\(\\)\\*+,\\-\\./:;<=>?@\\[\\]^_`\\{|\\}~]{8,}"
        return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: self)
    }
}
Run Code Online (Sandbox Code Playgroud)