• ベストアンサー

文字列チェックの動作がおかしい・・・

フォームのメールアドレスチェックで動作がおかしいです。 自分では、問題がないと思っているのですが、どこかおかしなところがあればご指摘ただければと思います。 動作確認を簡単にするために作ったソースは if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkk-kkkkk.com')) { print "NG1\n"; }else { print "OK1\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkk-kkkkk.com')) { print "NG2\n"; }else { print "OK2\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkkkkkkk.com')) { print "NG3\n"; }else { print "OK3\n"; } if(!ereg("^[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkkkkkkk.com')) { print "NG4\n"; }else { print "OK4\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkk-kkkkk.com')) { print "NG5\n"; }else { print "OK5\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkk-kkkkk.com')) { print "NG6\n"; }else { print "OK6\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'k_kkkk@kkkkkkkkkk.com')) { print "NG7\n"; }else { print "OK7\n"; } if(!ereg("[0-9a-zA-Z\_\.\-\@]+$",'kkkkk@kkkkkkkkkk.com')) { print "NG8\n"; }else { print "OK8\n"; } です。予想していた結果は、全てOKとなるはずだったのですが、予想に反して NG1 NG2 OK3 OK4 OK5 OK6 OK7 OK8 となり、マッチングパターン部分が「^[0-9a-zA-Z\_\.\-\@]+$」となっているときだけ、ハイフンが文字列に含まれていると、予想と違っています。 自分的には??なのですが・・・ どこがおかしいのか、ご指摘いただければと思います。 長文ですみません。

  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

試してみました。PHP4.3.9と4.3.10では同じ症状ですね。ちなみにpreg_match関数だとちゃんと動きます。アドレスチェックだけでしたらpreg_match関数で動くと思いますし、こちらの方が動作が速いそうです。

fedorars
質問者

お礼

レスありがとうございます。 preg_matchで行ったところ、問題なく動作しました。 ありがとうございました。 preg_matchだとデリミタも含めて、Perlでの正規表現と同じ書き方ができるので、私好みですね。 これからは、preg_matchを使うことにします。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

文字クラスの指定で\-(ハイフン)の指定がうまく認識できていないようです。 "^[-0-9a-zA-Z\_\.\@]+$" としたらウチの環境ではうまく行きました バグかもしれませんね。

fedorars
質問者

お礼

レスありがとうございます。 ご指摘の通り、ハイフンを文字クラスの最初に持って行った場合、うまく動作しました。 私の方のPHPのバージョンは、レンタルサーバで4.2.4devとなっていました。 他のサーバでも色々試してみたいと思います。 ありがとうございました。

関連するQ&A

  • 全角カタカナの確認

    perl 初心者です。 $str が全て全角カタカナかどうか確認したいのですがうまく行きません。 $str="アイウエオ"; などとして if ($str =~ /^[ア-ンーヽヾ]/){ print "OK\n"; } else {print "NG\n";} とすると、先頭の文字が全角カタカナかどうかの確認ができます。 ネット上の古い記事を見て if ($str =~ /^[ア-ン][ア-ンーヽヾ]+$/){ print "OK\n"; } else {print "NG\n";} としたのですが、NG になってしまいます。何処が違ってるのでしょうか。 [ア-ンーヽヾ] の部分は、「ーヽヾ」は先頭には来ないのでこうしたとのことです。 よろしくお願いしまう。

  • 文字列の末尾を削除

    $moji="あいうえ215おかき15"; ↓ $moji="あいうえ215おかき"; のように変更したいのですがわかりません。 $moji=mb_ereg_replace('[^0-9a-zA-Z_]', '', $moji); すると真ん中の数字も消えるので駄目! rtrimは特定の末尾文字だけですし正規表現できない。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHP 正規表現 数字又は数字以外を判別

    下記コードですが、 「数字以外が含まれています。」と表示されるはずなのに「数字です。」と表示されてしまいます。どこがおかしいかお分かりの方おられますか? $num1 ="123"; $num2 ="a"; $num3 ="123"; if($num1 != "" or $num2 != "" or $num3 != "") { if($num1 == "" or $num2 == "" or $num3 == "") { if(!ereg("^[0-9]+$", $num1) or !ereg("^[0-9]+$", $num2) or !ereg("^[0-9]+$", $num3)) { print "数字以外が含まれています。\n"; } } } else { print "数字です。\n"; }

    • 締切済み
    • PHP
  • 8080のサーバーへアクセス可能かチェック

    www.sample.com:8080という風に設定したwebサーバーがありますが ここにアクセスできるかをプログラム中でチェックしたいのですが 例えば10秒アクセスできないといったものですが $fp = fsockopen("www.sample.com", 8080, $errno, $errstr, 10); if (!$fp) { echo "ng<br />\n"; } else { echo "ok<br />\n"; } 以上では8080だとうまくチェックできません、なにかいい方法はないでしょうか?

    • ベストアンサー
    • PHP
  • 半角英数字の正規表現でドット(.)がはじかれない

    Javascriptのmatchでファイル名の使用可能文字のチェックを行っています。 使用可能文字は漢字、全角ひらがな、カタカナ、半角英数字、ハイフン(-)、 アンダーバー(_)で以下のように書いています。 if ( filename.match(/[^\u30a0-\u30ff\u3040-\u309f\u30e0-\u9fcf\0-9a-zA-Z\-\_]/) ){ alart(NG) // 使用可能文字以外が含まれている } else{ alart(OK) // 使用可能文字だけ } ファイル名が「ひらがな-カタ_漢字1a」はOK、「ひらが.な-カタ_漢字1a」はNG としたいのですが両方OKになってしまいます。 どうやら半角英数字の「0-9a-zA-Z」を条件に入れることでドット(.)も使用可能文字 とされてしまうみたいです。 「0-9a-zA-Z」を外すと「ひらが.な-カタ_漢字1a」はNG判定になります。 なぜこのようになるのか教えて下さい。

    • ベストアンサー
    • Java
  • strstrを利用しない文字列検索について

    キーボードから入力した文字列 str に対し, This is~の文字列中に str が出現するかどうかを判定して表示するプログラムを作成したいのですが、うまくコンパイルができません。 条件ですが、、、 ・forループを利用し、0文字目、1文字目と順に検索していく ・strstr関数およびstring.hを利用しない です。このプログラムをいじって教えてほしいです。 ややこしくて答えづらい質問かと思いますが、有識者の知恵を拝借したいです。よろしくお願いします。 #include <stdio.h> int main(void) { char str[256]; char s[] = "This is a pen. That is an apple."; int i,j,k,checker; printf("This is a pen. That is an apple.\n\n"); gets(str); for(j=0;j<256;j++) { for(i=j,k=0;str[k]!='\0';k++,i++) { if(str[k]==s[i]) { checker=1; } else { checker=0; } } } if(checker==0) { printf("NG!その文字列は含まれていません。\n"); } else { printf("OK!その文字列は含まれています。\n"); } }

  • 文字列のマッチについて

    下記cgiで+、*、?が含んでいるとマッチしないんですが 正しいマッチのさせ方を教えてください。 それと+*?以外にもマッチしない文字があるのでしょうか? ---実行結果--- yy+yyは含んでいない yy*yyは含んでいない yy/yyは含んでいる yy-yyは含んでいる yyyyは含んでいる yy1yyは含んでいる yy=yyは含んでいる yy?yyは含んでいない yy&yyは含んでいる yy yyは含んでいる yy.yyは含んでいる ---Perl--- #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<html><head><title>counter</title></head>\n"; print "<body>\n"; @data = ('yy+yy', 'yy*yy', 'yy/yy', 'yy-yy', 'yyyy', 'yy1yy', 'yy=yy', 'yy?yy', 'yy&yy', 'yy yy', 'yy.yy'); foreach $a (@data) { $b = $a; if ($b !~ m/$a/){ print "$aは含んでいない";print "<br>"; } else{print "$aは含んでいる";print "<br>";} } print "</body></html>\n";

    • ベストアンサー
    • Perl
  • 1文字以上のアルファベットが入力されているかチェックするには

    正規表現で1文字以上のアルファベットが含まれているかを確認する事はできますか? 1234567890 → × a123456789 → ○ 1234a56789 → ○ 123456789a → ○ a123b4567c → ○ import java.util.regex.*; Pattern pattern = Pattern.compile("?a-zA-Z{1,}?"); Matcher matcher = pattern.matcher("文字列"); if(matcher.matches()==false){   return "NG"; } アドバイス宜しくお願いします。

    • ベストアンサー
    • Java
  • 正規表現

    質問させていただきます。 文字コード「Shift-JIS」で渡ってきた文字列を 英字とスペースはOKで、 それ以外の文字列が入力されていたら、エラーいう処理を しているのですが、うまくいきません。 ご教授よろしくお願いします。 // 半角にする $kana = mb_convert_kana($_POST['kana'], "r"); if ((ereg("^[a-zA-Z]+$", trim($kana))) == false) {   echo "エラーです"; } 全角スペースと半角スペースと英字はOKで、それ以外はNG としたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのソース内でのVodafone絵文字の扱い方

    PHPで、DoCoMo,Vodafone,auの3機種の絵文字を出し分けるファンクションを書いていました。 function emoji($imode,$vodafone,$ez){ $ua = $_SERVER["HTTP_USER_AGENT"]; if(ereg("DoCoMo",$ua)){ print $imode; }else if(ereg("J-PHONE",$ua)){ print $vodafone; }else if(ereg("Vodafone",$ua)){ print $vodafone; }else if(ereg("UP.Browser",$ua)){ print "<IMG LOCALSRC=".$ez." />"; } } というファンクションを定義し、 <?php emoji(ドコモの絵文字,Vodafoneの絵文字,EZの絵文字番号); ?> と書けば、アクセスしたキャリアによって絵文字を出し分けるしくみです。 しかし、Vodafoneの絵文字のコードが特殊なため、エラーになってしまいます。 $記号が含まれているせいかな?と思って $の前に\を入れてみたりもしましたが、ダメでした。 何かよい回避方法はありますでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう