Reputation: 8022
I need to determine if a string contains any of the characters from a custom set that I have defined.
I see from this post that you can use rangeOfString to determine if a string contains another string. This, of course, also works for characters if you test each character one at a time.
I'm wondering what the best way to do this is.
Upvotes: 61
Views: 74805
Reputation: 3525
Question was specifically: "if a string contains any of the characters from a custom set" and not checking for all characters in the custom set.
Using
func check(in string: String, forAnyIn characters: String) -> Bool {
// create one character set
let customSet = CharacterSet(charactersIn: characters)
// use the rangeOfCharacter(from: CharacterSet) function
return string.rangeOfCharacter(from: customSet) != nil
}
check(in: "abc", forAnyIn: "A") // false
check(in: "abc", forAnyIn: "b") // true
But this is also very easy to check using character sets.
func check(in string: String, forAnyIn characters: String) -> Bool {
let customSet = CharacterSet(charactersIn: characters)
let inputSet = CharacterSet(charactersIn: string)
return !inputSet.intersection(customSet).isEmpty
}
check(in: "abc", forAnyIn: "A") // false
check(in: "abc", forAnyIn: "b") // true
Upvotes: 1
Reputation: 8147
ONE LINE Swift4 solution to check if contains letters:
CharacterSet.letters.isSuperset(of: CharacterSet(charactersIn: myString) // returns BOOL
Another case when you need to validate string for custom char sets. For example if string contains only letters and (for example) dashes and spaces:
let customSet: CharacterSet = [" ", "-"]
let finalSet = CharacterSet.letters.union(customSet)
finalSet.isSuperset(of: CharacterSet(charactersIn: myString)) // BOOL
Hope it helps someone one day:)
Upvotes: 24
Reputation: 780
Use like this in swift 4.2
var string = "Hello, World!"
let charSet = NSCharacterSet.letters
if string.rangeOfCharacter(from:charSet)?.isEmpty == false{
print ("String contain letters");
}
Upvotes: -1
Reputation: 10738
Swift 4
let myString = "Some Words"
if myString.contains("Some"){
print("myString contains the word `Some`")
}else{
print("myString does NOT contain the word `Some`")
}
Swift 3:
let myString = "Some Words"
if (myString.range(of: "Some") != nil){
print("myString contains the word `Some`")
}else{
print("Word does not contain `Some`")
}
Upvotes: 1
Reputation: 51911
From Swift 1.2 you can do that using Set
var str = "Hello, World!"
let charset: Set<Character> = ["e", "n"]
charset.isSubsetOf(str) // `true` if `str` contains all characters in `charset`
charset.isDisjointWith(str) // `true` if `str` does not contains any characters in `charset`
charset.intersect(str) // set of characters both `str` and `charset` contains.
Swift 3 or later
let isSubset = charset.isSubset(of: str) // `true` if `str` contains all characters in `charset`
let isDisjoint = charset.isDisjoint(with: str) // `true` if `str` does not contains any characters in `charset`
let intersection = charset.intersection(str) // set of characters both `str` and `charset` contains.
print(intersection.count) // 1
Upvotes: 7
Reputation: 3430
Swift 3 example:
extension String{
var isContainsLetters : Bool{
let letters = CharacterSet.letters
return self.rangeOfCharacter(from: letters) != nil
}
}
Usage :
"123".isContainsLetters // false
Upvotes: 9
Reputation: 539775
You can create a CharacterSet
containing the set of your custom characters
and then test the membership against this character set:
Swift 3:
let charset = CharacterSet(charactersIn: "aw")
if str.rangeOfCharacter(from: charset) != nil {
print("yes")
}
For case-insensitive comparison, use
if str.lowercased().rangeOfCharacter(from: charset) != nil {
print("yes")
}
(assuming that the character set contains only lowercase letters).
Swift 2:
let charset = NSCharacterSet(charactersInString: "aw")
if str.rangeOfCharacterFromSet(charset) != nil {
print("yes")
}
Swift 1.2
let charset = NSCharacterSet(charactersInString: "aw")
if str.rangeOfCharacterFromSet(charset, options: nil, range: nil) != nil {
println("yes")
}
Upvotes: 101
Reputation: 1084
Using Swift 3 to determine if your string contains characters from a specific CharacterSet:
let letters = CharacterSet.alphanumerics
let string = "my-string_"
if (string.trimmingCharacters(in: letters) != "") {
print("Invalid characters in string.")
}
else {
print("Only letters and numbers.")
}
Upvotes: 3
Reputation: 615
swift3
var str = "Hello, playground"
let res = str.characters.contains { ["x", "z"].contains( $0 ) }
Upvotes: 4
Reputation: 828
func isAnyCharacter( from charSetString: String, containedIn string: String ) -> Bool
{
return Set( charSetString.characters ).isDisjointWith( Set( string.characters) ) == false
}
Upvotes: 2
Reputation: 9419
You could do it this way:
var string = "Hello, World!"
if string.rangeOfString("W") != nil {
println("exists")
} else {
println("doesn't exist")
}
// alternative: not case sensitive
if string.lowercaseString.rangeOfString("w") != nil {
println("exists")
} else {
println("doesn't exist")
}
Upvotes: 0