- 2010-03-02 (火) 12:23
- MooTools
MooToolsのForm.Validatorの足りないところを補う日本語環境向けaddAllThese。中身は殆どzeromailからの転載。
全角チェック、全てひらがな、全てカタカナ、全て全角数字、全て全角英数、日本語の有無、郵便番号、電話番号。
続きに郵便番号検索APIとの連携例と、Form.Validatorを搭載したメールフォームのデモがあります。
JavaScript:
-
Form.Validator.addAllThese([
-
['isJpOnly',
-
{
-
errorMsg:'全て半角英数の文字列は使用できません。',
-
test: function(el){if(el.value.length == 0) return true; else return !el.get('value').test(/^[\x01-\x7e]+$/,'i');}
-
}
-
],
-
['isNoAlp',
-
{
-
errorMsg:'全て全角で記入してください。',
-
test:function(el){if(el.value.length == 0) return true; else return el.get('value').test(/^[^ -~。-゚]*$/);}
-
}
-
],
-
['isHirakana',
-
{
-
errorMsg:'全てひらがなで記入してください。',
-
test:function(el){if(el.value.length == 0) return true; else return el.get('value').test(/^[あ-ん]+$/,'i');}
-
}
-
],
-
['isKatakana',
-
{
-
errorMsg:'全てカタカナで記入してください。',
-
test:function(el){if(el.value.length == 0) return true; else return el.get('value').test(/^[ア-ン]+$/,'i');}
-
}
-
],
-
['isZNum',
-
{
-
errorMsg:'全て全角数字で記入してください。',
-
test:function(el){if(el.value.length == 0) return true; else return el.get('value').test(/^[0-9]+$/,'i');}
-
}
-
],
-
['isZAlp',
-
{
-
errorMsg:'全て全角英数字で記入してください。',
-
test:function(el){if(el.value.length == 0) return true; else return el.get('value').test(/^[0-9A-Z]+$/,'i');}
-
}
-
],
-
['isKana',
-
{
-
errorMsg:'カタカナもしくはひらがなで記入してください。',
-
test:function(el){if(el.value.length == 0) return true; else return el.get('value').test(/^[ア-ンあ-ん]+$/,'i');}
-
}
-
],
-
['validate-zipcode',
-
{
-
errorMsg:'郵便番号の書式に誤りがあります。',
-
test:function(el){if(el.value.length == 0) return true; else return el.get('value').test(/(^\d{3}\-\d{4}$)|(^\d{7}$)/);}
-
}
-
],
-
['validate-tel',
-
{
-
errorMsg:'電話番号の書式に誤りがあります。',
-
test:function(el){
-
var value = el.get('value');
-
if(value.length == 0) return true;
-
-
if(el.get('value').test("-")){
-
if(value.test(/^(090|080|070)/)){
-
return value.test(/(^(090|080|070)(\-\d{4}\-\d{4})$)|(^[\d\-]{13}$)/);
-
}else if(value.test(/^(0080|0120)/)){
-
return value.test(/(^0120(\-\d{2,3}\-\d{3,4}|[\d\-]{12})$)|(^0080\-\d{3}\-\d{4}$)/);
-
}else{
-
return value.test(/(^\d{2,5}?\-\d{1,4}?\-\d{4}$|^[\d\-]{12}$)/);
-
}
-
}else{
-
if(value.test(/^(090|080|070)/)){
-
return value.test(/^(090|080|070)\d{8}$/);
-
}else if(value.test(/^(0080|0120)/)){
-
return value.test(/(^0120\d{6}$)|(^0080\d{7}$)/);
-
}else{
-
return value.test(/^\d{10}$/);
-
}
-
}
-
}
-
}
-
]
-
]);
電話番号の正規表現修正
郵便番号検索との連携
バリデータをクリアしたら郵便番号検索APIにリクエストを送信して住所を表示する。
APIは大抵JSONPなのでMoreのRequest.JSONPが必要。
下記サンプルはここの郵便番号検索APIを利用した場合のソースです。
HTMLはZeroMailのメールフォームから一部抜粋。
HTML:
-
</tr>
-
</tr>
JavaScript:
-
['validate-zipcode',
-
{
-
errorMsg:'郵便番号の書式に誤りがあります。',
-
test:function(el){
-
if(el.value.length == 0){ return true;
-
}else if(el.get('value').test(/(^\d{3}\-\d{4}$)|(^\d{7}$)/)){
-
new Request.JSONP({
-
noCache:true,
-
url: 'http://zipcloud.ibsnet.co.jp/api/search?zipcode='+el.get("value")+"&callback=Request.JSONP.request_map.request_0",
-
onRequest:function(){
-
$$(".address-box").fade(0.3).setProperty('readonly','readonly');
-
},
-
onComplete: function(obj){
-
if($type(obj.results)=="array")
-
$$(".address-box").set("value",obj.results[0].address1+obj.results[0].address2+obj.results[0].address3).removeProperty('readonly').fade(1);
-
else
-
$$(".address-box").fade(1).removeProperty('readonly');
-
}
-
}).send();
-
return true;
-
}
-
}
-
}
-
]
メールフォームへの実装例
CSSとXHTMLはZeroMailのデフォルトのやつです。
関連記事
- Newer: ZeroMail ver1.2
- Older: ZeroMail ver1.1