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

qml*_*ery 23 nscharacterset swift

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

到目前为止,我已经看到了NSCharacterSet.letterCharacterSet()一组字母,但是我无法检查该集合中的字符是否在给定的字符串中.当我使用此代码时,我收到一条错误说明:

'人物'不能兑换成'unichar'

对于以下代码:

for chr in input{
    if letterSet.characterIsMember(chr){
        return "Woah, chill out!"
    }
}
Run Code Online (Sandbox Code Playgroud)

Vic*_*ler 44

您可以通过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")
}
Run Code Online (Sandbox Code Playgroud)

或者你也可以这样做:

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

在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
}
Run Code Online (Sandbox Code Playgroud)

这取决于你,选择一种方式.我希望这对你有帮助.

  • 第一个解决方案很优雅。 (2认同)
  • 应该明确的是,虽然第一个示例使用 `NSCharacterSet`,也适用于非英语字母(德语、西班牙语,甚至希伯来语,希望也适用于阿拉伯语),但第二个仅适用于英语字母,这可能不适用成为国际用户所期望的。 (2认同)
  • Swift 4:`if let _ = string.rangeOfCharacter(from: NSCharacterSet.letters) { }` (2认同)

Jar*_*sen 7

您应该使用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")
}
Run Code Online (Sandbox Code Playgroud)

替换"aeiou"你正在寻找的任何字母.

一个不那么灵活但有趣的快速音符就是你可以使用任何可用的功能Sequence.所以你可以这样做:

contains("abc", "c")
Run Code Online (Sandbox Code Playgroud)

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