狐の王国

人は誰でも心に王国を持っている。

HTML5で使える(かもしれない)正規表現コピペ

HTML5では正規表現が使えるようになるという記事があがってたのだが、まあデザイナーさんたちに正規表現覚えろってのもアレなので……。学習ネタもあげてくれてるけど、HTML5のpattern属性に使う程度ならコピー&ペーストで済ませてもいいんじゃないかなと思うし。

文字種関連

数字だけに限定する
[0-9]*

1桁以上は必須にしたければこう

[0-9]+
数字を8桁に限定する
[0-9]{8}
数字を4桁以上に限定する
[0-9]{4,}
数字を3桁以上8桁以下に限定する
[0-9]{3,8}

ちなみにperlとかでは ^[0-9]{3,8}$ とやって頭から終りまでであることを示さないと動かないが、HTML5例示を見る限り必要無いっぽい?

アルファベットに限定する
[a-zA-Z]*

1文字以上は必須にしたければこう。

[a-zA-Z]+
アルファベットを8文字に限定する
[a-zA-Z]{8}
アルファベットを3文字以上に限定する
[a-zA-Z]{3,}
アルファベットを3文字以上8文字以下に限定する
[a-zA-Z]{3,8}

n文字以下がやりたかったら一つ目の数字を1か0にすりゃいいんじゃね?

大文字だけとか小文字だけとかはサーバ側で変換すりゃいい。Perlならtr、Rubyならupcaseメソッドとかdowncaseメソッドがある。ユーザーに面倒かけさせんな。

$ irb
>> 'hOgE'.upcase
=> "HOGE"
>> 'hOgE'.downcase
=> "hoge"

$ perl -le '$s = 'hOgE'; $s =~ tr/a-z/A-Z/; print $s'
HOGE
$ perl -le '$s = 'hOgE'; $s =~ tr/A-Z/a-z/; print $s'
hoge
ひらがな・カタカナに限定する
[ぁ-んァ-ン]

平仮名だけとか片仮名だけとかは(ry

$ perl -Mutf8 -le 'binmode STDOUT, ":encoding(utf8)"; $s = 'ゎぁぃァィゥェォぁぃぅぇぉあかさたなガギグゲゴゐゑーゐ'; $s =~ tr/ぁ-ん/ァ-ン/; print $s'
ヮァィァィゥェォァィゥェォアカサタナガギグゲゴヰヱーヰ
$ perl -Mutf8 -le 'binmode STDOUT, ":encoding(utf8)"; $s = 'ゎぁぃァィゥェォぁぃぅぇぉあかさたなガギグゲゴゐゑーゐ'; $s =~ tr/ァ-ン/ぁ-ん/; print $s'
ゎぁぃぁぃぅぇぉぁぃぅぇぉあかさたながぎぐげごゐゑーゐ

irbになぜか日本語入らなかったのでrubyスクリプトで。

$ cat >hirakana.rb
$KCODE = 'UTF-8'
require 'jcode'
puts 'ゎぁぃァィゥェォぁぃぅぇぉあかさたなガギグゲゴゐゑーゐ'.tr('ぁ-ん', 'ァ-ン')
puts 'ゎぁぃァィゥェォぁぃぅぇぉあかさたなガギグゲゴゐゑーゐ'.tr('ァ-ン', 'ぁ-ん')
^D
$ ruby hirakana.rb
ヮァィァィゥェォァィゥェォアカサタナガギグゲゴヰヱーヰ
ゎぁぃぁぃぅぇぉぁぃぅぇぉあかさたながぎぐげごゐゑーゐ

同じ要領でアルファベットの全角半角変換もできるのでお試しあれ。

その他

ってこれくらいしか用途思い付かないんだけどもあと他になんかある?
これくらいなら正規表現なんか使わなくてもいい気がするんだけどなあ……。

HTMLのformに使うなら、頭はアルファベットで始まって3文字以上で次に数字が2桁でさらになんでもいいんだけど文字が3文字続いたあとSがあるかもしれないけどそれはLのこともBのこともあってそもそも無いかもしれないんだけど、とにかくあとは適当に文字が続いて最後は絶対Wで終るんだけどそれが小文字のこともあるの、とかいう用途はないだろうし。

^[a-zA-Z]{3,}[0-9]{2}...[SLB]?.*[Ww]$
Sugano `Koshian' Yoshihisa(E) <koshian@foxking.org>