Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@tomtwinkle

Golangでひらがな、カタカナ、漢字を判定する

Golangで漢字を判定する必要があったので正規表現を使ってUnicodeの範囲を指定するみたいな事しないといけないのかなと思って調べていたんですが、built inのunicode packageUnicodeの範囲を示す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)
}

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

半角カナもちゃんと判定されてますね。良さそうです。

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tomtwinkle
golangおいしいです。
beex-inc
BeeXではクラウドネイティブアプリ開発、企業の基幹クラウド基盤構築、システム移行、運用保守を行っています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?