我正在研究文本字段验证,并且困惑如何验证文本字段必须包含来自以下所有类别的至少1个字符: 英文大写字母(A-Z)。 英文小写字母(a-z)。
答案 0 :(得分:2)
简单扩展名接受任何 CharacterSet
进行检查:
extension String {
func hasCharacter(in characterSet: CharacterSet) -> Bool {
return rangeOfCharacter(from: characterSet) != nil
}
}
用法:
"aBc".hasCharacter(in: .lowercaseLetters)
"aBc".hasCharacter(in: .uppercaseLetters)
答案 1 :(得分:1)
信用:TextField uppercase and lowercase validation
以下是条件的正则表达式:-至少8个字符,1个大写字母和1个数字。
^(?=。 [az])(?=。 [AZ])(?=。 \ d)(?=。 [$ @ $!%?&])[A-Za-z \ d $ @ $!%?&] {8,}
extension String {
func isValidPassword() -> Bool {
let regularExpression = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{8,}"
let passwordValidation = NSPredicate.init(format: "SELF MATCHES %@", regularExpression)
return passwordValidation.evaluate(with: self)
}
}
//Example 1
var password = "@Abcdef011" //string from UITextField (Password)
password.isValidPassword() // -> true
//Example 2
var password = "wer011" //string from UITextField
password.isValidPassword() // -> false
答案 2 :(得分:0)
看看CharacterSet
(描述为here)
您可以创建各种字符集(例如小写字母),并测试字符串是否具有与所述字符集匹配的内容。
因此,您可以创建一个返回布尔值的函数。该函数对照两个CharacterSet
来检查您的字符串,并且只有在字符串中都可以找到两者时,该函数才会返回true
。
类似这样的东西
func validate(string: String) -> Bool {
let lowercase = CharacterSet.lowercaseLetters
let uppercase = CharacterSet.uppercaseLetters
let lowercaseRange = string.rangeOfCharacter(from: lowercase)
let uppercaseRange = string.rangeOfCharacter(from: uppercase)
return lowercaseRange != nil && uppercaseRange != nil
}
validate(string: "Hello") //returns true
validate(string: "hello") //returns false
validate(string: "HELLO") //returns false
请查看NSHipster的this article,以了解更多信息。
答案 3 :(得分:0)
希望这会对您有所帮助。
func isValidPassword(testStr:String?) -> Bool {
guard testStr != nil else { return false }
// at least one uppercase,
// at least one lowercase
// 8 characters total
let passwordTest = NSPredicate(format: "SELF MATCHES %@", "(?=.*[A-Z])(?=.*[a-z]).{8,}")
return passwordTest.evaluate(with: testStr)
}