我正在尝试创建一个方法,用于查找字符串是否包含数字,大写字母和使用正则表达式的特殊字符,如下所示
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)
另一种替代解决方案。
您可以使用一个正则表达式完成所有检查。
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)
至少 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)