如何检查字符串是否包含空格/字母数字等字符?

24
你怎样在Swift中使用"ctype.h"库来使用isAlpha或者isSpace函数用于字符?或者有更好的Swift方法吗?
这个问题已经被回答了,但是似乎并不起作用:Swift: how to find out if letter is Alphanumeric or Digit 它没有说明如何导入库。能否有人指点一下方向?
这是我到目前为止所做的:
extension String {
    subscript (i : Int) -> String {
        return String(Array(self)[i])
    }
}

let whitespace = NSCharacterSet.whitespaceCharacterSet()

let phrase = "Test case"

for var i=0; i<countElements(phrase); i++ {
    if whitespace.characterIsMember(phrase[i]) { //error
        println("char is whitespace")
    }
}

在Swift字符串中使用不支持Unicode的方法是一个好主意吗? - trojanfoe
似乎Swift中已经移除了(isAlpha()、isDigit()等只适用于ASCII的函数)。但是答案中基于NSCharacterSet的方法仍然可以使用。 - Martin R
我正在尝试使用(NSCharacterSet),但它一直显示“字符无法转换为unichar”。 - hazrpg
发布你的代码。还记得Swift如何处理不同原始类型之间的自动转换吗? - gnasher729
我已经更新了问题并附上了代码。 - hazrpg
6个回答

35

在整个字符串上使用NSCharacter,而不是逐个字符地使用:

let whitespace = NSCharacterSet.whitespaceCharacterSet()

let phrase = "Test case"
let range = phrase.rangeOfCharacterFromSet(whitespace)

// range will be nil if no whitespace is found
if let test = range {
    println("whitespace found")
}
else {
    println("whitespace not found")
}

输出:

whitespace found

11

我创建了一个String扩展,它恰好可以做到这一点,希望它有用。

extension String {
    func containsWhitespaceAndNewlines() -> Bool {
        return rangeOfCharacter(from: .whitespacesAndNewlines) != nil
    }
}

// Usage
"hello, world!".containsWhitespaceAndNewlines() // true
"hello,world!".containsWhitespaceAndNewlines() // false

10

更短的扩展名(Swift 4.1)

extension String {
    var containsWhitespace : Bool {
        return(self.rangeOfCharacter(from: .whitespacesAndNewlines) != nil)
    }
}

你可以像这样使用任何其他CharacterSet替换.whitespacesAndNewlines

extension String {
    var containsDigits : Bool {
        return(self.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil)
    }
}

2
这个答案适用于文本字段。我曾经试图在UItextfield上搜索空格,而不是搜索其字符串内容,结果让我抓狂了。这个方法适用于UItextfields: Swift 4:
    if (textField.text?.contains(" "))!{
        print("Has space")
    }else{
        print("Does not have space")
    }

这是针对普通字符串的内容,同样适用于Swift 4。最初的回答(Original Answer):
    if string.contains(" "){
        print("Has space")
    }else{
        print("Does not have space")
    }

1

对于Swift 5

extension String {

    func containsWhiteSpace() -> Bool {

        // check if there's a range for a whitespace
        let range = self.rangeOfCharacter(from: .whitespacesAndNewlines)

        // returns false when there's no range for whitespace
        if let _ = range {
            return true
        } else {
            return false
        }
    }
}

-1

这个函数将告诉你一个字符串中是否有空格。例如,如果您想确保用户输入名字和姓氏。

Swift 5

func validatTextField() -> Bool {
        var isValid = false
        if textField.text!.contains(" ") && !textField.text!.isEmpty{
            let cardHolderChar = textField.text!
            for i in cardHolderChar {
                if i == " " && i == cardHolderChar.last {
                    isValid = false
                }
                else {
                    isValid = true
                }
            }
        }
        return isValid
    }

这个回答如何回答问题?您没有提供任何评论。 - Marek H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接