チェックは、正規表現でやれば、いろんな言語でいけそうなので、正規表現で、いろんな値をチェックする方法を考える、シリーズ「正規表現でのチェック方法を考える」。
今、数字関係をやっているのですが、今回は、数字何桁っていう桁数指定の話です。
で、それだけだと、あまりにも短いので、2進数、8進数、16進数についても、書いてみたいと思います。
なお、このシリーズにおいて、説明文中の¥は、断りがなければ、半角の円マーク(ないしは、バックスラッシュ)に変えてください(入力が面倒なので全角にしています)
■数字○桁
これは、数字指定の¥dのあとに、中カッコで、桁数を書けばよい
数字3桁なら、
/^¥d{3}$/
だし、3桁以下(0桁、つまり未入力もOK)なら
/^¥d{0,3}$/
みたいなかんじ。
■2進、8進
2進数なら、0,1なので、[01]でOK
なので、たとえば2進数3桁以下なら
/^[01]{0,3}$/
みたいなかんじ。
8進数は、0から7までなので、[0-7]でOK
なので、たとえば8進数3桁以下なら
/^[0-7]{0,3}$/
みたいなかんじ。
■16進数
16進数の場合、0-9と、A-Fまでだけど、a-fで表すときもあるので、
[0-9A-Fa-f]となる。
なので、たとえば8進数3桁以下なら
/^[0-9A-Fa-f]{0,3}$/
みたいなかんじ。
■きょうのサンプルソース
16進のところ、上記の条件だと、
7Fdのように、大文字小文字混在もOKになる。
まー、OKでもいいんだけど、やっぱそれは・・・(^^;)
っていうので、混在はいけない!とする場合
(ただし、大文字、小文字どちらも可)のサンプル
<HTML> <HEAD> <TITLE>JavaScriptテスト広場</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- function load() { } function mycheck(val) { if (val.search(/^([0-9A-F]{0,3}|[0-9a-f]{0,3})$/) != -1 ) { } else { alert("エラー"); } } --> </SCRIPT> </HEAD> <BODY onload="load()"> <FORM NAME="buf"> <INPUT NAME="Text1" TYPE="hidden"> </FORM> <FORM NAME="zikko"> <INPUT NAME="text1" TYPE="TEXT"> <INPUT NAME="button1" TYPE="BUTTON" VALUE="実行" onclick=mycheck(text1.value)> </FORM> </BODY> </HTML> |
(上記< > ¥は、本当は半角)
■なお。。
数字の場合、頭の0は、省略するのが普通です。
010とかかず、10とかきます。
でも、16進の場合、dとかかずに、0dと書くことも
多いです(バイト単位で書く場合などは、このように
0を省略しないです)。
なので、今回の例は、頭の0も許していますが、
もし、0以外、頭の0は許したくないなら、
たとえば、16進なら
/^(0|[1-9A-Fa-f][0-9A-Fa-f]*)$/
みたいなかんじになります。