Skip to content

[SR-3597] CharacterSet isEmpty method failing #313

Open
@swift-ci

Description

@swift-ci
Previous ID SR-3597
Radar None
Original Reporter Nteissler (JIRA User)
Type Bug

Attachment: Download

Additional Detail from JIRA
Votes 0
Component/s
Labels Bug, CharacterSet
Assignee None
Priority Medium

md5: 27b6a52ddd0420df6cf1819fe7ce0c67

Issue Description:

I was trying to user CharacterSet to check if a user input string contains any non decimal digit characters. I use CharacterSet.decimalDigits and take the intersection of that with the user input. If this intersection is empty, it presumably means the user hasn't entered valid input. Yet the intersection is not empty.

let digits = CharacterSet.decimalDigits  
let letters = CharacterSet(charactersIn: "abcd") // never prints

let intersection = digits.intersection(letters)  
for c in "abcd".characters {  
  if intersection.contains(UnicodeScalar(String(c))!) {  
    print("contains \(c)") // never prints  
  }  
}

for i in 0...9 {  
  if intersection.contains(UnicodeScalar(String(i))!) {  
    print("contains \(i)")  
  }  
}

print("intersection is empty: (intersection.isEmpty)") // prints false

I even tried looping over all unicode scalars to test for membership, and that doesn't print anything.

for i in 0x0000...0xFFFF {  
  guard let c = UnicodeScalar(i) else {  
    continue  
  }  
  if intersection.contains(c) {  
    print("contains \(c)")  
  }  
}

Why is the set non empty?

Note: using let digits = CharacterSet(charactersIn: "1234567890") works as expected. I know that the decimalDigits contains more than just 0-9, but the intersection should still be empty.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions