Golangでひらがな、カタカナ、漢字を判定する
Golangで漢字を判定する必要があったので正規表現を使ってUnicodeの範囲を指定するみたいな事しないといけないのかなと思って調べていたんですが、built inのunicode packageにUnicodeの範囲を示すRangeTableが既に用意されていたのでした。
というわけでunicode packageを利用してこんな感じで実装出来ます。
ひらがなを判定する
import (
"unicode"
)
func IsHiragana(r rune) bool {
return unicode.In(r, unicode.Hiragana)
}
カタカナを判定する
import (
"unicode"
)
func IsKatakana(r rune) bool {
return unicode.In(r, unicode.Katakana)
}
漢字を判定する
import (
"unicode"
)
func IsKanji(r rune) bool {
return unicode.In(r, unicode.Han)
}
import (
"unicode"
)
func IsHiragana(r rune) bool {
return unicode.In(r, unicode.Hiragana)
}
import (
"unicode"
)
func IsKatakana(r rune) bool {
return unicode.In(r, unicode.Katakana)
}
漢字を判定する
import (
"unicode"
)
func IsKanji(r rune) bool {
return unicode.In(r, unicode.Han)
}
import (
"unicode"
)
func IsKanji(r rune) bool {
return unicode.In(r, unicode.Han)
}
UniHanは日本漢字の他に繁体字、簡体字、韓国漢字、ベトナム漢字が含まれます。
厳密に日本の漢字のみを判定したいならRangeTableを独自に定義してUnicodeの範囲を指定してあげる必要がありそうです。
動作確認
package main
import (
"fmt"
"unicode"
)
func main() {
for _, s := range []string{"あ", "ア", "ア", "漢"} {
rs := []rune(s)
fmt.Printf("[%s]", s)
fmt.Printf(" IsHiragana=%v", IsHiragana(rs[0]))
fmt.Printf(" IsKatakana=%v", IsKatakana(rs[0]))
fmt.Printf(" IsKanji=%v", IsKanji(rs[0]))
fmt.Println()
}
}
func IsHiragana(r rune) bool {
return unicode.In(r, unicode.Hiragana)
}
func IsKatakana(r rune) bool {
return unicode.In(r, unicode.Katakana)
}
func IsKanji(r rune) bool {
return unicode.In(r, unicode.Han)
}
[あ] IsHiragana=true IsKatakana=false IsKanji=false
[ア] IsHiragana=false IsKatakana=true IsKanji=false
[ア] IsHiragana=false IsKatakana=true IsKanji=false
[漢] IsHiragana=false IsKatakana=false IsKanji=true
package main
import (
"fmt"
"unicode"
)
func main() {
for _, s := range []string{"あ", "ア", "ア", "漢"} {
rs := []rune(s)
fmt.Printf("[%s]", s)
fmt.Printf(" IsHiragana=%v", IsHiragana(rs[0]))
fmt.Printf(" IsKatakana=%v", IsKatakana(rs[0]))
fmt.Printf(" IsKanji=%v", IsKanji(rs[0]))
fmt.Println()
}
}
func IsHiragana(r rune) bool {
return unicode.In(r, unicode.Hiragana)
}
func IsKatakana(r rune) bool {
return unicode.In(r, unicode.Katakana)
}
func IsKanji(r rune) bool {
return unicode.In(r, unicode.Han)
}
[あ] IsHiragana=true IsKatakana=false IsKanji=false
[ア] IsHiragana=false IsKatakana=true IsKanji=false
[ア] IsHiragana=false IsKatakana=true IsKanji=false
[漢] IsHiragana=false IsKatakana=false IsKanji=true
半角カナもちゃんと判定されてますね。良さそうです。
Author And Source
この問題について(Golangでひらがな、カタカナ、漢字を判定する), 我々は、より多くの情報をここで見つけました https://qiita.com/tomtwinkle/items/d52a01d5a020b00b4b8e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .