ユーザー登録などでメールアドレス入力フォームはよく使われると思います。
RFCの規格にちゃんと準拠したチェックが正しいのですが、NTTDocomo社が『.(ドット)が複数連続してはいけない』というルールを無視してしまったのをきっかけに
携帯会社各社では、このルールに違反しています。
このようなことがあるため規格に準拠したチェックはできなくなっています。
日本語ドメインもあり得ますし…
少なくとも満たしていなければいけないルールのみでのチェックです。
(1)空入力は禁止
(2)@は1つ
(3)@以降の.(ドット)は1つ以上
(4)文字の長さは7文字以上
(5),(コロン)は使えない
(6)確認アドレスと一致している
(7)@以降の.(ドット)は連続しない
(8)@の直後に.(ドット)は存在しない
(9).(ドット)から始まらない
(10).(ドット)で終わらない
(11)@の直後に-(ハイフン)は存在しない
(12)-(ハイフン)から始まらない
(13)-(ハイフン)で終わらない
(14)@の直後に_(アンダーバー)は存在しない
(15)_(アンダーバー)から始まらない
(16)_(アンダーバー)で終わらない
これだけではJavaScriptを無効にしていたり、JavaScriptが使えないブラウザではチェックできません。
(エラーは出ません)
ちゃんとスクリプト内でもチェックしましょう。
[参考記事] PHPでのチェック
<form name="enter" action="#" method="post" onsubmit='return ch_mail();'>
メール
<input type="text" name="mail" />
<input type="text" name="mail2" />(確認)
<input type="submit" value="送信" />
</form>
メール
<input type="text" name="mail" />
<input type="text" name="mail2" />(確認)
<input type="submit" value="送信" />
</form>
JavaScript
function ch_mail(){
mails = document.enter.mail.value;
mails2 = document.enter.mail2.value;
//空入力をチェック
if(mails == ""){
alert("メールアドレスを入力してください。");
return false;
}
//@の数と@以降の.(ドット)の数をチェック
cflag1 = 0;
cflag2 = 0;
di = 0;
for(var i=0; i < mails.length; i++){
if(mails.charAt(i) == "@"){
cflag1++;
}
if(cflag1 > 0 && mails.charAt(i) == "."){
cflag2++;
//@以降の.(ドット)は連続しない
if(di + 1 == i){
cflag1++;
break;
}
di = i;
}
}
//@は1つ
//@以降の.(ドット)は1つ以上
//文字の長さは7文字以上
//@の直後に.(ドット)は存在しない
//.(ドット)から始まらない
//.(ドット)で終わらない
//@の直後に-(ハイフン)は存在しない
//-(ハイフン)から始まらない
//-(ハイフン)で終わらない
//@の直後に_(アンダーバー)は存在しない
//_(アンダーバー)から始まらない
//_(アンダーバー)で終わらない
if(cflag1 != 1 || cflag2 < 1 || mails.length < 7 ||
mails.indexOf("@.") > 0 || mails.charAt(0) == "." || mails.charAt(mails.length-1) == "." ||
mails.indexOf("@-") > 0 || mails.charAt(0) == "-" || mails.charAt(mails.length-1) == "-" ||
mails.indexOf("@_") > 0 || mails.charAt(0) == "_" || mails.charAt(mails.length-1) == "_"){
alert("メールアドレスを正しく入力してください。");
return false;
}
//,(コロン)の数をチェック
cflag3 = 0;
for(var i=0; i < mails.length; i++){
if(mails.charAt(i) == ","){
cflag3++;
}
}
//,(コロン)は使えないので.(ドット)との勘違いを警告
if(cflag3 > 0){
alert("メールアドレスに使用できない文字が含まれています。¥n『.』と『,』を間違っていませんか。");
return false;
}
//確認アドレスと照らし合わせる
if(mails != mails2){
alert("確認用メールアドレスが一致していません。");
return false;
}
}
mails = document.enter.mail.value;
mails2 = document.enter.mail2.value;
//空入力をチェック
if(mails == ""){
alert("メールアドレスを入力してください。");
return false;
}
//@の数と@以降の.(ドット)の数をチェック
cflag1 = 0;
cflag2 = 0;
di = 0;
for(var i=0; i < mails.length; i++){
if(mails.charAt(i) == "@"){
cflag1++;
}
if(cflag1 > 0 && mails.charAt(i) == "."){
cflag2++;
//@以降の.(ドット)は連続しない
if(di + 1 == i){
cflag1++;
break;
}
di = i;
}
}
//@は1つ
//@以降の.(ドット)は1つ以上
//文字の長さは7文字以上
//@の直後に.(ドット)は存在しない
//.(ドット)から始まらない
//.(ドット)で終わらない
//@の直後に-(ハイフン)は存在しない
//-(ハイフン)から始まらない
//-(ハイフン)で終わらない
//@の直後に_(アンダーバー)は存在しない
//_(アンダーバー)から始まらない
//_(アンダーバー)で終わらない
if(cflag1 != 1 || cflag2 < 1 || mails.length < 7 ||
mails.indexOf("@.") > 0 || mails.charAt(0) == "." || mails.charAt(mails.length-1) == "." ||
mails.indexOf("@-") > 0 || mails.charAt(0) == "-" || mails.charAt(mails.length-1) == "-" ||
mails.indexOf("@_") > 0 || mails.charAt(0) == "_" || mails.charAt(mails.length-1) == "_"){
alert("メールアドレスを正しく入力してください。");
return false;
}
//,(コロン)の数をチェック
cflag3 = 0;
for(var i=0; i < mails.length; i++){
if(mails.charAt(i) == ","){
cflag3++;
}
}
//,(コロン)は使えないので.(ドット)との勘違いを警告
if(cflag3 > 0){
alert("メールアドレスに使用できない文字が含まれています。¥n『.』と『,』を間違っていませんか。");
return false;
}
//確認アドレスと照らし合わせる
if(mails != mails2){
alert("確認用メールアドレスが一致していません。");
return false;
}
}