试图确保方法检查中的阿尔法和连字符Swift

发布时间: 2017/3/6 23:25:36
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

亲爱的同胞 iOS 开发人员︰

我有一个打算返回布尔值 true,如果一个字符串值,它接收包含任意组合的大小写字符或连字符,并返回 false,如果它包含任何数字或特殊字符的方法 (即包含上述字符集之外的任何东西)。 我有下面的方法,不幸的不这样︰

let alphaCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-"

        if self.isNameValid("joe-bYlow") {
            print("correct")
        } //passes

        if self.isNameValid("YYYYY") {
            print("correct")
        } //passes

        if self.isNameValid("8888ja;sdf") {
            print ("wrong")
        } //fails i.e. it prints "wrong"

        if self.isNameValid("__^&^%%%jdjjd") {
            print ("wrong")
        } //fails i.e. it prints "wrong"

        if self.isNameValid("9999") {
            print("also wrong")
        } //passes

        if self.isNameValid("blahBlah8") {
            print("wrong")
        } //fails i.e. it prints "wrong"

        if self.isNameValid("Frank") {
            print("correct")
        } //passes

    func isNameValid(name: String) -> Bool {
        let characterSetAllowed = NSCharacterSet(charactersInString: alphaCharacters)
        if let _ = name.rangeOfCharacterFromSet(characterSetAllowed, options: .CaseInsensitiveSearch) {
            return true
        } else {
            return false
        }
    }

任何人都可以看到它是我做错了吗? 谢谢你提前给所有人回复。

解决方法 1:

你的解决方案是非常接近是正确的。您的方法中的逻辑就检查是否名称中的任何字符字母字符。

若字符串 __^&^%%%jdjjdrangeOfCharacterFromSet 返回在集合中找到的第一个字符的范围。因此它返回范围 {8, 1} 第一 j

我们所以如何检查字符串中的所有字符?你可以遍历每个字符,但这似乎是很多工作。

我的解决方案会让你不想要然后检查的所有字符在所设置的字符集。

func isNameValid(name: String) -> Bool {
    let characterSetNotAllowed = NSCharacterSet(charactersInString: alphaCharacters).invertedSet
    if let _ = name.rangeOfCharacterFromSet(characterSetNotAllowed, options: .CaseInsensitiveSearch) {
        return false
    } else {
        return true
    }
}

此外,谢谢你将你的代码放在一个窗体,可以轻松地把操场上显示的问题。它使人们很容易找到的原因。

赞助商