Как сравнить две строки без учета регистра в Swift язык?
Как мы можем сравнить две строки в случае игнорирования swift ? например :
var a = "Cash"
var b = "cash"
есть ли какой-либо метод, который вернет true, если мы сравним var a & var b
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
означает, что строки окажутся в том же месте в словаре
попробуйте это:
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: вы можете определить свой собственный оператор, например,
~=
.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'