dポイントプレゼントキャンペーン実施中!

質問させてください。

メールアドレスの正当性チェックを作成してみようと思いました。
(1)"@"より左側の部分は3桁以上16桁以内
(2)使用可能文字は、英小文字,数字,'-', '.', '_'
(3)先頭文字は英小文字のみ
(4)先頭・末尾文字に'-', '.', '_'は使用不可
(5)数字のみ'_', '.', '-'のみのアドレスはだめ

---------------------------------------
$value = "xxxxxx@****.com";
$flg = 0;
$address = split("@", $value);

//****(1)****//
if((strlen($address[0]) > 16) || (strlen($address[0] < 3)){
$flg = 1;
}

if($flg == 0){
echo("このアドレスはつかます");
}else{
echo("このアドレスはつかえません");
}
------------------------------

と、チェックの(1)しかわからないのですが、
(2) ~ (5)のアドバイスを下さい。
宜しくお願い致します。

A 回答 (4件)

Perl 互換の正規表現が使えるハズなのに、思ったとおりに動かない罠。


私は PHP でのメアドチェックは以下のようにしています。

if ( ereg( "^[-._a-z0-9]+@[-.a-z0-9]+\.[a-z]{2,4}$", $email ) ) {
echo "$email : OK";
} else {
echo "$email : NG";
}

多分もっとスマートで細かいチェックが出来る正規表現があるんでしょうねぇ。
    • good
    • 0

こんな感じで如何でしょうか?


/*----------*/
 $addr = $address[0];
 if( ereg("^[a-z][0-9a-z._-]{2,15}$", $addr) &&
   !ereg("[_.-]$", $addr) &&
   ereg("[^0-9]", $addr) ){
  echo "Pass!!\n";
  $flg = 1;
 }
/*----------*/
「正規表現」というモノを覚えると、こういったもののチェックが楽にできます。
    • good
    • 0

if (ereg("^[0-9a-z\-\.\_]+$", $address))


↑ではだめですか?
^は先頭
+は文字列の繰り返し
$は最終文字

なので,1文字目から最後の文字まで[]内のチェックをするという意味になります。
    • good
    • 0

eregを使うとうまくチェックをかけることができます。



下の2つのサイトを使うとできると思いますよ。
http://itb-tech.itboost.co.jp/php/php_06.php
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
    • good
    • 0
この回答へのお礼

返信有難うございます。
なんとか、(2), (3), (4)の作成ができました。
(5)がどうしてもわかりません。

if(ereg("0-9a-z\-\.\_", $address)){
echo("OK");
}else{
echo("NO");
}
としてるんですが、
$address = "freaf827398r---/...__adf829";
でもOKになってしまいます。
どこかおかしいですか?

お礼日時:2003/04/23 16:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!