如何在Swift语言中比较两个忽略大小写的字符串?

时间:2015-05-29 14:53:14

标签: ios swift string

我们怎样才能在swift忽略的情况下比较两个字符串? 例如:

var a = "Cash"
var b = "cash"

如果我们比较var a&是否有任何方法会返回true var b

16 个答案:

答案 0 :(得分:160)

试试这个:

对于年长的swift:

var a : String = "Cash"
var b  : String = "cash"

if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
    println("voila")
}

Swift 3.0& 4.1

    var a : String = "Cash"
    var b  : String = "cash"

    if(a.caseInsensitiveCompare(b) == .orderedSame){
        print("voila")
    }

答案 1 :(得分:32)

使用caseInsensitiveCompare方法:

let a = "Cash"
let b = "cash"
let c = a.caseInsensitiveCompare(b) == .orderedSame
print(c) // "true"

ComparisonResult告诉你哪个词在字典顺序中比另一个更早出现(即哪一个更靠近字典的前面)。 .orderedSame表示字符串最终会出现在字典中的相同位置

答案 2 :(得分:20)

if a.lowercaseString == b.lowercaseString {
    //Strings match
}

答案 3 :(得分:8)

试试这个:

var a = "Cash"
var b = "cash"
let result: NSComparisonResult = a.compare(b, options: NSStringCompareOptions.CaseInsensitiveSearch, range: nil, locale: nil)

// You can also ignore last two parameters(thanks 0x7fffffff)
//let result: NSComparisonResult = a.compare(b, options: NSStringCompareOptions.CaseInsensitiveSearch)

结果是NSComparisonResult枚举的类型:

enum NSComparisonResult : Int {

    case OrderedAscending
    case OrderedSame
    case OrderedDescending
}

所以你可以使用if语句:

if result == .OrderedSame {
    println("equal")
} else {
    println("not equal")
}

答案 4 :(得分:4)

可以自己滚动:

func equalIgnoringCase(a:String, b:String) -> Bool {
    return a.lowercaseString == b.lowercaseString
}

答案 5 :(得分:4)

Swift 3

正确的方式:

    let a: String = "Cash"
    let b: String = "cash"

    if a.caseInsensitiveCompare(b) == .orderedSame {
        //Strings match 
    }

请注意: ComparisonResult.orderedSame也可以简写为.orderedSame。

其他方式:

<强>一个。

    if a.lowercased() == b.lowercased() {
        //Strings match 
    }

<强>湾

    if a.uppercased() == b.uppercased() {
        //Strings match 
    }

<强>角

    if a.capitalized() == b.capitalized() {
        //Strings match 
    }

答案 6 :(得分:1)

您也可以将所有字母设为大写(或小写),看看它们是否相同。

var a = “Cash”
var b = “CASh”

if a.uppercaseString == b.uppercaseString{
  //DO SOMETHING
}

这将使两个变量都为”CASH”,因此它们是相等的。

您还可以制作String分机号

extension String{
  func equalsIgnoreCase(string:String) -> Bool{
    return self.uppercaseString == string.uppercaseString
  }
}

if "Something ELSE".equalsIgnoreCase("something Else"){
  print("TRUE")
}

答案 7 :(得分:1)

  

localizedCaseInsensitiveContains :通过执行不区分大小写,区域设置感知的搜索来返回接收方是否包含给定字符串

if a.localizedCaseInsensitiveContains(b) {
 //returns true if a contains b (case insensitive)
 }

<强>被修改

  

caseInsensitiveCompare :返回调用compare(_:options :)的结果,并将NSCaseInsensitiveSearch作为唯一选项。

if a.caseInsensitiveCompare(b) == .orderedSame {
 //returns true if a equals b (case insensitive)
 }

答案 8 :(得分:1)

电话号码比较示例;使用Swift 4.2

npm start

答案 9 :(得分:0)

extension String
{
    func equalIgnoreCase(_ compare:String) -> Bool
    {
        return self.uppercased() == compare.uppercased()
    }
}

使用样本

    print("lala".equalIgnoreCase("LALA"))
    print("l4la".equalIgnoreCase("LALA"))
    print("laLa".equalIgnoreCase("LALA"))
    print("LALa".equalIgnoreCase("LALA"))

答案 10 :(得分:0)

Swift 4,我使用caseInsensitiveCompare()作为模板进行了String扩展路由(但允许操作数是可选的)。这里是我曾经把它放在一起的游乐场(Swift的新手,所以反馈不仅仅是欢迎)。

import UIKit

extension String {
    func caseInsensitiveEquals<T>(_ otherString: T?) -> Bool where T : StringProtocol {
        guard let otherString = otherString else {
            return false
        }
        return self.caseInsensitiveCompare(otherString) == ComparisonResult.orderedSame
    }
}

"string 1".caseInsensitiveEquals("string 2") // false

"thingy".caseInsensitiveEquals("thingy") // true

let nilString1: String? = nil
"woohoo".caseInsensitiveEquals(nilString1) // false

答案 11 :(得分:0)

您只需编写几行代码即可进行字符串扩展以进行比较

extension String {

    func compare(_ with : String)->Bool{
        return self.caseInsensitiveCompare(with) == .orderedSame
    } 
}

答案 12 :(得分:0)

对于Swift 5 忽略大小写并比较两个字符串

var a = "cash"
 var b "Cash"
if(a.caseInsensitiveCompare(b) == ComparisonResult.orderedSame){
print("Ok")
}

答案 13 :(得分:-1)

Swift 3

if a.lowercased() == b.lowercased() {

}

答案 14 :(得分:-1)

Swift 3 :您可以定义自己的运算符,例如~=

infix operator ~=

func ~=(lhs: String, rhs: String) -> Bool {
   return lhs.caseInsensitiveCompare(rhs) == .orderedSame
}

然后你可以在游乐场尝试

let low = "hej"
let up = "Hej"

func test() {
    if low ~= up {
        print("same")
    } else {
        print("not same")
    }
}

test() // prints 'same'

答案 15 :(得分:-3)

斯威夫特3:

您还可以使用两个字符串函数之间的本地化不区分大小写的比较,并返回Bool

var a = "cash"
var b = "Cash"

if a.localizedCaseInsensitiveContains(b) {
    print("Identical")           
} else {
    print("Non Identical")
}