全角・半角・ひらがな・カタカナ

アルファベットの大文字/小文字を区別せずに文字列を比較するのはよくあることですが、
全角・半角・ひらがな・カタカナに対応する方法もあるようです。


以前せっかく調べたので忘れないようにメモしておこう。


open System.Globalization

let contains (value:string) source =
let compareInfo = CompareInfo.GetCompareInfo("ja-JP")
let options =
CompareOptions.IgnoreCase // 大文字・小文字区別なし
||| CompareOptions.IgnoreKanaType // ひらがな・カタカナ区別なし
||| CompareOptions.IgnoreWidth // 全角・半角区別なし

compareInfo.IndexOf(source, value, options) > -1

let test () =
"雨ニモマケズ" |> contains "まけず" |> printfn "%b" // true
"全角でF#" |> contains "F#" |> printfn "%b" // true
"F♯" |> contains "F#" |> printfn "%b" // false