JavaScript正規表現のひらがな、全角半角カタカナ、漢字判定

ひらがなのみ場合

const str1 = 'ア'
const str2 = 'あ'
const hiraganaRegex = /^[\p{scx=Hiragana}]+$/u
const result1 = hiraganaRegex.test(str1)
const result2 = hiraganaRegex.test(str2)

console.log(result1)
// => false

console.log(result2)
// => true

※ ^と$がなければ「ひらがなが含まれている場合」になります。(以下同)

全角カタカナのみ場合

const str1 = 'あ'
const str2 = 'ア'
const katakanaRegex = /^[\p{scx=Katakana}]+$/u
const result1 = katakanaRegex.test(str1)
const result2 = katakanaRegex.test(str2)

console.log(result1)
// => false

console.log(result2)
// => true

※ ㌔や㌘などは記号なので全角カタカナの判定にはなりません。

半角カタカナのみ場合

const str1 = 'ア'
const str2 = 'ア'
const katakanaRegex = /^[ヲ-゚]+$/
const result1 = katakanaRegex.test(str1)
const result2 = katakanaRegex.test(str2)

console.log(result1)
// => false

console.log(result2)
// => true

※ \p{scx=Hankakukana}のようなものはありません。

全角と半角カタカナのみ場合

const str1 = 'アあ'
const str2 = 'アア'
const katakanaRegex = /^[\p{scx=Katakana}|ヲ-゚]+$/u
const result1 = katakanaRegex.test(str1)
const result2 = katakanaRegex.test(str2)

console.log(result1)
// => false

console.log(result2)
// => true

※「ヲ-゚」は「ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚」

漢字のみ場合

const str1 = 'ア'
const str2 = '亜'
const kanjiRegex = /^[\p{scx=Han}]+$/u
const result1 = kanjiRegex.test(str1)
const result2 = kanjiRegex.test(str2)

console.log(result1)
// => false

console.log(result2)
// => true

※ ㍾や㋿などは記号なので漢字の判定にはなりません。

ひらがなと全角カタカナのみ場合

const str1 = 'あ亜'
const str2 = 'あア'
const hirakataRegex = /^[\p{scx=Hiragana}\p{scx=Katakana}]+$/u
const result1 = hirakataRegex.test(str1)
const result2 = hirakataRegex.test(str2)

console.log(result1)
// => false

console.log(result2)
// => true

関数の引数で条件を組み合わせる場合

const str1 = 'あ亜'
const str2 = 'あ亜ア'
const str3 = 'あ亜アア'

const hiragana = '\\p{scx=Hiragana}'
const katakanaZen = '\\p{scx=Katakana}'
const katakanaHan = 'ヲ-゚'
const kanji = '\\p{scx=Han}'
const mixRegex = (...regex) => new RegExp('^[' + regex.join('') + ']+$', 'u')
const result1 = mixRegex([hiragana, kanji]).test(str1)
const result2 = mixRegex([hiragana, katakanaZen, kanji]).test(str2)
const result3 = mixRegex([hiragana, katakanaZen, katakanaHan, kanji]).test(str3)

console.log(result1)
// => true

console.log(result2)
// => true

console.log(result3)
// => true