如何检查字符串是否包含 Swift 中的字母?

How can I check if a string contains letters in Swift?

我正在尝试检查特定字符串是否包含字母。

到目前为止,我遇到的 NSCharacterSet.letterCharacterSet() 是一组字母,但我无法检查该组中的字符是否在给定字符串中。当我使用此代码时,我收到一条错误消息:

'Character' is not convertible to 'unichar'

对于以下代码:

for chr in input{
    if letterSet.characterIsMember(chr){
        return "Woah, chill out!"
    }
}

.characterIsMember 的问题在于它需要 unicharUInt16 的类型别名)。

如果您使用字符串的 utf16 视图迭代您的输入,它将起作用:

let set = NSCharacterSet.letterCharacterSet()
for chr in input.utf16 {
    if set.characterIsMember(chr) {
        println("\(chr) is a letter")
    }
}

如果您只想检查 presence/non-presence:

,也可以跳过循环并使用 contains 算法
if contains(input.utf16, { set.characterIsMember([=11=]) }) {
    println("contains letters")
}

您可以通过以下方式使用NSCharacterSet

let letters = NSCharacterSet.letters

let phrase = "Test case"
let range = phrase.rangeOfCharacter(from: characterSet)

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

或者你也可以这样做:

func containsOnlyLetters(input: String) -> Bool {
   for chr in input {
      if (!(chr >= "a" && chr <= "z") && !(chr >= "A" && chr <= "Z") ) {
         return false
      }
   }
   return true
}

In Swift 2:

func containsOnlyLetters(input: String) -> Bool {
   for chr in input.characters {
      if (!(chr >= "a" && chr <= "z") && !(chr >= "A" && chr <= "Z") ) {
         return false
      }
   }
   return true
}

就看你的选择了。希望对你有帮助。

您应该将 String 内置的范围函数与 NSCharacterSet 一起使用,而不是推出您自己的解决方案。这也会给你更多的灵活性(如果你愿意的话,比如不区分大小写的搜索)。

let str = "Hey this is a string"
let characterSet = NSCharacterSet(charactersInString: "aeiou")

if let _ = str.rangeOfCharacterFromSet(characterSet, options: .CaseInsensitiveSearch) {
    println("true")
}
else {
    println("false")
}

用您要查找的任何字母替换 "aeiou"

一个不那么灵活但有趣的 swift 注意事项仍然是,您可以使用 Sequence 可用的任何功能。所以你可以这样做:

contains("abc", "c")

这当然只适用于个别角色,不灵活,不推荐。