Project

General

Profile

Feature #14055

String#casecmp should use Unicode folding

Added by rbjl (Jan Lelis) about 2 years ago. Updated about 2 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:83566]

Description

The following string and symbol methods are currently only ASCII aware:

  • String#casecmp
  • String#casecmp!
  • Symbol#casecmp
  • Symbol#casecmp!

For example:

"a".casecmp("A") #=> 0
"ä".casecmp("Ä") #=> 1

Now that Ruby has implemented case-folding (which is meant for comparing strings, see http://unicode.org/faq/casemap_charprop.html#2), it should be used when doing a casecmp on Unicode strings:

"Ä".downcase(:fold) == "ä" #=> true

Related issues

Related to Ruby master - Feature #12786: String#casecmp?ClosedActions

History

Updated by shyouhei (Shyouhei Urabe) about 2 years ago

  • Status changed from Open to Rejected

Yes, we have unicode-aware case folding. But the problem is, because String#casecmp returns either -1, 0, or 1, we need to define a total ordering of strings in case-insensitive manner. It's pretty difficult (if not impossible).

If you are not interested in sorting strings but only for comparison, you can use String#casecmp? method (note the "?"). See also: https://bugs.ruby-lang.org/issues/12786

#2

Updated by nobu (Nobuyoshi Nakada) about 2 years ago

Updated by rbjl (Jan Lelis) about 2 years ago

Thanks for the pointer!

Also available in: Atom PDF