Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
簡単なFormチェック用のスクリプトを用意してみました。HTML側のコールはonSubmitのみ。各処理をできるだけサブルーチン化して、必要に応じて呼び分ける方式で記述してます。
name属性の使い方を工夫すれば、使うFormが増えても、大元ののコール関数は一個で十分かもしれない!
ソースは以下
HTML
<form action="" method="post" id="check" onsubmit="return formCheck(this);">
<dl>
<dt>名前</dt>
<dd><input type="text" size="30" value="" name="name" /></dd>
<dt>本文</dt>
<dd><textarea cols="30" rows="10" name="body"></textarea></dd>
<dt>Email</dt>
<dd><input type="text" size="30" value="" name="mail" /></dd>
<dt>トラックバック</dt>
<dd><textarea cols="30" rows="10" name="track"></textarea></dd>
</dl>
<p><input type="submit" value="送信" /></p>
</form>
Script (コール関数)
function formCheck(form) {
// 入力チェック
if(!chNull(form.name, '名前')) return false;
if(!chNull(form.body, '本文')) return false;
// 文字数チェック
if(!chNum(form.name,3,25, '名前')) return false;
// 半角チェック
if(!chHalf(form.mail, 'Email')) return false;
// アドレスチェック
if(!chMail(form.mail, 'Email')) return false;
// URLチェック
if(!chURL(form.track, 'トラックバック')) return false;
return true;
}
var email = /[\w\.\-.\_]+@([\w\-]+\.)+[\w]+/ig;
var http_url = /s?https?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+/ig;
var ftp_url = /ftp:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+/ig;
Script (入力チェック)
function chNull(obj,msg) {
if(!obj) return true;
if(obj.value=="") {
window.alert(msg+'が入力されていません');
obj.focus();
return false;
}
return true;
}
Script (文字数チェック)
function chNum(obj,min,max,msg) {
if(!obj) return true;
var num = obj.value.length;
var brw = navigator.appName;
if(num < min) {
window.alert(msg + 'は' + min + '文字以上で入力してください')
obj.focus();
return false;
}
if(num > max) {
window.alert(msg + 'は' + max + '文字以下で入力してください')
obj.focus();
return false;
}
return true;
}
Script (半角チェック)
function chHalf(obj,msg){
if(!obj) return true;
var str = obj.value;
for (var i=0; i<str.length; i++) {
/* 1文字ずつ文字コードをエスケープし、その長さが4文字未満なら半角 */
var len = escape(str.charAt(i)).length;
if (len >= 4){
window.alert(msg + 'に全角文字が含まれています');
obj.focus();
return false;
}
return true;
}
Script (mailチェック)
function chMail(obj,msg) {
if(!obj) return true;
var adr = obj.value;
if(adr=="") return true;
if(email.test(adr)==false) {
window.alert(msg + 'のアドレスが不正です');
obj.focus();
return false;
}
return true;
}
Script (URLチェック)
function chURL(obj,msg) {
if(!obj) return true;
var url = obj.value;
if(url=="") return true;
if(http_url.test(url)==false) {
window.alert(msg + 'のURLが不正です');
obj.focus();
return false;
}
return true;
}
2006.08.26 : 各サブルーチンに、そもそも「オブジェクトが存在するか」の確認を追加。これでコール関数にnameを追加するだけでチェック項目を追加できる。
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。