文字がアルファベットのみか判定したい

概要

入力文字列がアルファベットだけかどうかを判定するときの方法についてまとめます.主にプログラミング寄りの話になります.
Facebookシェア Twitterツイート LINEで送る このエントリーをはてなブックマークに追加
この章を学ぶ前に必要な知識
0
条件
  • 長さが1以上の入力文字列
効果
  • 文字列がアルファベットだけで構成されているかどうかが分かる
ポイント
  • 正規表現で行うかシンプルな方法で行うかの二通り

解 説

入力された文字列がアルファベットのみで作られているか判定したいことがあります.幾らかの言語ではあらかじめアルファベットかどうかを判定するコードがあります. ここでは1文字ずつ確認するシンプルな方法と正規表現によるものを紹介します. ともに本質的には同じことをしています.
文字がアルファベットのみか判定したい
Python
1
2
3
4
5
6
7
strA = "abc"
 
#isalphaで全てがアルファベットか確認できる
strA.isalpha() #True
 
strB = "ab1c"
strB.isalpha() #False
Pythonに用意されている関数isalphaを用いた場合
C++ではisalpha自体はないがいろいろな関数を組み合わせれば実現することができる.右の質問サイトの回答ではいくらかの方法についてまとまっている.

1.シンプルな方法による1文字ずつの確認

シンプルな文字列の確認では、 ・あらかじめ文字列を全て書いておき、それと比較(配列に"abc...."を書いておき、それと比較) ・ASCIIコードであるならば、値の範囲を指定して比較(A-Zは0x41-5A,a-zは0x61-0x7A) のどちらかで入力文字列の文字と逐次比較する方法で、 先頭から順繰りに見ていく. これを愚直に確認すれば文字列が全てアルファベットか確認できる. 若干手間なのが難点.
シンプルな方法による実装

2.正規表現による文字列の確認

正規表現ではシンプルな方法のときよりも簡単にコードを記述することができる. 多くのプログラミング言語は正規表現での文字列一致の確認を何らかの方法で提供しているので、それを利用して判定を記述する
正規表現による文字列の確認
JavaScript
1
2
3
4
5
6
str="cAGFKJFJskdfjJKLSKDF"
str_rslt = str.match(/([a-z]|[A-Z])/gi); //正規表現
# ["c", "A", "G", "F", "K", "J", "F", "J", "s", "k", "d", "f", "j", "J", "K", "L", "S", "K", "D", "F"]という結果
(str_rslt.length == str.length)
#文字列の長さと正規表現の結果が一致すれば全てアルファベット
#アルファベット以外が含まれば正規表現の結果が少なくなる
JavaScriptによる文字列表現の例
小文字アルファベットのみ 大文字アルファベットのみ 全てのアルファベット
^[a-z]+$ ^[A-Z]+$ ^[a-zA-Z]+$

のような形で記述できます.

正規表現によるアルファベットの判定
Python
1
2
3
4
5
6
7
import re
 
ans = re.match('^[a-zA-Z]+$', "abcfgef")    #OK
ans = re.match('^[a-z]+$', "abcXfgef")      #NG
ans = re.match('^[a-z]+$', "abc123fgef")    #NG
ans = re.match('^[a-zA-Z]+$', "abcXfgef")   #OK
ans = re.match('^[a-zA-Z]+$', "abc123fgef") #NG
Pythonはisalphjaがあるが、正規表現による例を示す re.matchはマッチしていなければNoneを返す
この章を学んで新たに学べる
Comments

Reasons
>>隠す