In my use case, I found a caseless box to be most useful.
, , . , , , "㎒" (U + 3392 SQUARE MHZ) "mhz" . , , . Chapter 3 - Default Caseless Matching Unicode.
, :
extern crate caseless;
use caseless::Caseless;
let a = "100 ㎒";
let b = "100 mhz";
assert!(!caseless::default_caseless_match_str(a, b));
assert!(caseless::compatibility_caseless_match_str(a, b));
case , default_case_fold_str:
let s = "Twilight Sparkle ちゃん";
assert_eq!(caseless::default_case_fold_str(s), "twilight sparkle ちゃん");
, , unicode-normalization:
extern crate unicode_normalization;
use caseless::Caseless;
use unicode_normalization::UnicodeNormalization;
fn compatibility_case_fold(s: &str) -> String {
s.nfd().default_case_fold().nfkd().default_case_fold().nfkd().collect()
}
let a = "100 ㎒";
assert_eq!(compatibility_case_fold(a), "100 mhz");
, .
( BurntSushi5 , .)