たとえば、電話番号をチェックすることを考えます。
電話番号は、
(1)ハイフン1個(市内局番からの場合)
数字1桁から4桁-数字4桁
(2)ハイフン2個(市外局番からの場合)
・かならず0ではじまる
・0のあと、数字1から4桁-数字1桁から4桁-数字4桁
という決まりがあったとします。
(本当はちがうかもしれませんけど、かりにこれをチェックするとします)
このチェックをJavaScriptでしたとすると、
正規表現を使えば、こんな感じになると思います
function denwa_check(val) { if (val.search(/^¥d{1,4}¥-¥d{4}$/) != -1 ) { } else if(val.search(/^0¥d{1,4}¥-¥d{1,4}¥-¥d{4}$/) != -1 ) { } else { alert("エラー"); } } |
(上記¥は、本当は半角)
でも、これ、正規表現つかわないでかくと・・・
たいへんなことに(^^;)
で、昨日、ここをかいていておもったんですけど、結局、正規表現は、
PHPならpreg_match
Perlのときは、/正規表現/修飾子みたいなかんじで
Javaならjava.util.regex.Patternクラス
JavaScriptだと、上記のように、search
VBScript,VBAだとRegExpオブジェクト
みたいなかんじで、だいたい正規表現はサポートしています。
で、実際のチェックは、ここにまとまったものがあるように、まあ、実数チェック、漢字チェック(ここの終わりのほうに、第二水準チェックとかもあるけど(リンク先間違っていたので修正しました2008/4/3))、半角カナ、文字列そのたもろもろ、パターンマッチングのものは、だいたい正規表現で表現できちゃいます。
ってことは、逆に言うと、正規表現「ばっちし」なら、どの言語でも、正規表現で、少ない行数で、ある意味かんたんにかけちゃいます。逆に、正規表現が苦手で、正規表現を使わないと、かなり複雑なIF文を、かなり長い行数かかってかかないと、いけなくなります。バグも入りやすくなり、読みやすくなくて、ある意味、修正が難しいプログラムになります。
でも、正規表現って、分からない人には、わからないし、苦手な人は、苦手ですよね・・
また、これ、SEが仕様で、正規表現でチェックするな・・ということを意識していると、それ向きな仕様を書いてくれるけど、SE自体が、正規表現わからないと、DQNな仕様になっちゃうかも・・
っていうことで、適当な正規表現エディタ(リンク先は検索でひっかかっただけで、使っていない)がないと、正規表現が分かっているSEが仕様をきって、わかっているPGが、プログラムを作った場合と、そうでないSE,PGが作った場合とで、ソースコードの量も違うし、っていうことは、バグの入りやすさも違ってきて・・・となってくると、格差を生じてしまう??
もちろん、前に書いたように、チェックをまとめてしまえば、正規表現をしってなくても、そのメソッド使えばいいだけだけど、正規表現をしらないような人に限って、まとめようとしない気が・・