動かざることバグの如し

3分経てば忘れそうなことをメモします

正規表現たん「半角英数字のみ ただし数字のみは不可」

できるかそんなもん(なお検証言語はRuby

できた

/\A(?!\d*\z)[a-z0-9]+\z/i

こうすると

通る

通らない

  • ほげ
  • hoge
  • 123

どうなってんの

キモはおそらく(?!\d*\z)の部分 最後に説明する

  • \A 文字列の最初 ^は使わないこと
  • [a-z0-9] a~z 0~9 つまりここが半角英数字を指定している
  • + 直前の文字列の1回以上の繰り返し
  • \z 文字列の最後 $は使わないこと
  • i 大文字と小文字区別しない

とここまでで/\A[a-z0-9]+\z/iが実現できる。つまり半角英数字のみである

つまり(?!\d*\z)こそが「数字のみは不可」を実現しているのである

否定先読み

見慣れない文字である?!は否定先読みと呼ばれる正規表現 例えば

/a(?!b)c/

とやった場合

通る

  • aaaaac
  • ac
  • aaccc

通らない

  • abc
  • abbbccc

と言った感じ

\dは数字を意味するので数字のみの場合はNGとやっているのである