TextField大写和小写验证

时间:2019-05-28 11:02:49

标签: ios swift

我正在研究文本字段验证,并且困惑如何验证文本字段必须包含来自以下所有类别的至少1个字符: 英文大写字母(A-Z)。 英文小写字母(a-z)。

4 个答案:

答案 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)
}