- ベストアンサー
メールアドレスの正規表現チェック
Javascript内でメールアドレスを正規表現でチェックしたいのですが、 チェックをすり抜けてしまいます。 どのように表現すればチェックがかかるのでしょうか? 文字列は下記の通りです。 @qq.com よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
var my_str = 'foo@qq.com', my_ng = /@qq\.com$/, my_eg = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; if ( my_ng.test(my_str) ) { alert('NG.'); } else if ( my_eg.test(my_str) ) { alert('OK!'); } else { alert('NG.'); } ~とりあえず上記の様な感じで判別可能だと思います。先に「NGワード」をチェックして振り分け、そこを通ったモノだけをさらに「email形式」かどうかの判定をして許可されたメルアドかどうかの判別をさせてます。 より詳細に「メルアドチェック」の判別をしたいのであれば… var my_eg = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i; ~と言う風に厳密に「有効なメールアドレスか?」を判別させる正規表現も無くは無いですが…まあ無駄に処理に時間が掛かるだけで余り意味は無いと思います。また今から新規で何かwebサイト等を作るという様な場合であれば、一般的なwebブラウザやスマホならば何の問題も無くHTML5を認識して動作させる事が可能ですので。 <form action="#" method="post" id="my_form"> <p><label>メールアドレス:<input type="email" id="email" class="email" size="30" maxlength="40"></label></p> <p><input type="submit" value="送信する"></p> </form> ~みたいな感じで最初から入力フォームに input[type="email] を付与して置けば、ブラウザからの文字列入力の時点で自動的に「メルアドチェック」を行ってくれます。この際に内部で使用されている正規表現も例文の my_eg で示した正規表現と全く同じモノでチェックしていますので結果は同じになります。
その他の回答 (2)
- 4017B
- ベストアンサー率73% (1336/1814)
>一向にサイトへの問い合わせが止みません 唐突に新キーワードを後出しジャンケンされても回答者はエスパーじゃ無いので何の事らや意味不明です。そもそもこのスレの最初の質問文に対して回答者は正確に答えようとしているのに、後から後から補足であれは違うこれは違うと言われたら、もうこちらとしても埒が明きません。最低限、小学6年生程度の日本語作文能力でお願いします。
補足
説明足らずですいませんでした。 【目的】 ・Webサイトの問い合わせフォームからの問い合わせメールを内部処理で 送信エラーとし処理中断させたい。 【現状】 ・Webサイトの問い合わせフォームからの問い合わせメールが1時間あたり4-5通継続して 送られ続けている。 ・アドレスは、「xxxxxxxx@qq.com」 ----- xxxxxxxxxはランダムな数字 ・問い合わせフォームは閉鎖できない。 ・日本後の環境でブラウザからハンド入力する際は、「xxxxxxxxx@qq.com」は 送信エラーで送信処理を中断出来ている←OK ・送信先アドレスを変更すれば、リアルタイムに反映される。 【目的】 ・問い合わせフォームのE-Mailアドレス入力欄に「xxxxxxxxx@qq.com」が セットされていたら送信エラーで処理を中断したい。 という状況です。 そこで、ご教授頂いた処理を組み込んだのが前述のソースとなります。 ・組み込み方に誤りがある ・そもそも止めることが出来ない を教えて頂けるとありがたいです。
- WDY
- ベストアンサー率27% (134/487)
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
補足
他の@等含むメールアドレスも不可となってしまいました。 末尾 .com .co.jp .jp 等の「@qq.com」以外のメールアドレスは有効としたいです。
補足
ご教授頂いた様に対策を講じたのですが、一向にサイトへの問い合わせが止みません。 他に原因が有るのでしょうか? 【記述抜粋】 chkMail にフォームから入力された”xxxxxxxxx@qq.com"の文字列がセットされています。 check2 = /@qq\.com$/; check3 = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; check4 = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i; if (check2.test(chkMail)){ obj.elements[i].style.backgroundColor='#FFEEEE'; obj.elements[i].style.color='#FF0000'; error_element_number.push(i); caution = caution + "メールアドレスが正しくありません。\n"; errorflag = 2; } else if (check3.test(chkMail)){ if (check4.test(chkMail)){ obj.elements[i].style.backgroundColor='#FFFFFF'; obj.elements[i].style.color='#000000'; } } else{ obj.elements[i].style.backgroundColor='#FFEEEE'; obj.elements[i].style.color='#FF0000'; error_element_number.push(i); caution = caution + "メールアドレスが正しくありません。\n"; errorflag = 2; }