Как сравнить две строки без учета регистра в Swift язык?


Как мы можем сравнить две строки в случае игнорирования swift ? например :

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

есть ли какой-либо метод, который вернет true, если мы сравним var a & var b

14 69

14 ответов:

попробуйте это :

для старых swift:

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

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

Swift 3.0

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

использовать caseInsensitiveCompare способ:

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

ComparisonResult говорит вам, какое слово приходит раньше, чем другое в лексикографическом порядке (т. е. какой из них ближе к передней части словаря). .orderedSame означает, что строки окажутся в том же месте в словаре

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

попробуйте это:

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")
}

может просто свернуть свой собственный:

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

Swift 3

ПРАВИЛЬНО:

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

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

обратите внимание: ComparisonResult.orderedSame также может быть записан как .приказано же стенографировать.

ДРУГИЕ СПОСОБЫ:

a.

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

b.

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

c.

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

вы также можете сделать все буквы прописными (или строчными) и посмотреть, совпадают ли они.

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")
}
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"))

Swift 4, я пошел по маршруту расширения строки, используя caseInsensitiveCompare () в качестве шаблона (но позволяя операнду быть необязательным). Вот игровая площадка, которую я использовал, чтобы собрать ее вместе (новый для 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

localizedCaseInsensitiveContains: возвращает, содержит ли получатель заданную строку, выполняя поиск без учета регистра и локали

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

пример сравнения телефонных номеров; с помощью swift 4.2

 var selectPhone = [String]()

    if selectPhone.index(where: {.caseInsensitiveCompare(contactsList[indexPath.row].phone!) == .orderedSame}) != nil {
           print("Same value")
     }
     else {
            print("Not the same")
     }

Swift 3

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

}

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'

Swift 3:

вы также можете использовать локализованное сравнение без учета регистра между двумя строками функции и возвращает Bool

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

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