• ベストアンサー

英文のみの投稿を拒否したい

こんにちは。初めて利用いたします。 phpの問い合わせフォームプログラムで「英文のみの投稿を拒否したい」のですがうまくいきません。 以下の条件式をいれてエラーチェックをしてみましたが、改行コードがあったり、:があったりするとエラーとならないです。 $str = $_POST['FORM']['MESSAGE'] ; if (preg_match("/^[0-9A-Za-z]*$/", $str)) { echo die("半角英数字のみは送信できません"); perlでの条件式は、検索で以下のような条件式で対応が出来ると発見はしました。 if ($in{'message'} !~ /[\x81-\xFC]/) phpでは、この条件式をどのようにすればよいのか? がわからないので、質問いたしました。 内容に不足している事項がございましたらご指摘下さい。 よろしくお願いいたします。

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

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

  • ベストアンサー
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

英文と言ってもアルファベットだけに限らず、半角スペースやコンマやセミコロンがあるだけではなく、記号もあると思います。 preg_match("/^[0-9A-Za-z]*$/", $str)  ゆるいところで言うと、問い合わせフォームでの内容において、ひらがなの入っていない日本語文はないとして、 if( preg_match('/[ぁ-ん]/',) == '0' ) echo die("ひらがながはいっていない"); とかがあります。

hihin2003
質問者

お礼

Suziさん 早速の回答ありがとうございます。 条件式をいれて動作確認いたしました。 エラーチェック無事できました!! とっても助かりました。

その他の回答 (1)

  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.2

ちょっとテストできる環境がないのですが、preg系はPerl互換の正規表現が使えるので、 if (!preg_match("/[\x81-\xFC]/", $str)) { は通りませんかね? 2バイト文字で使用される0x81~0xFCのコードが入っているか見ているだけなので、 No.1さんの回答とやってることは同じようなものかなって思いますけど。 (実際には使用される漢字コードによって変わるのでNo.1さんの回答の方がよろしいかと)

hihin2003
質問者

お礼

ts3m-ickwさん 回答ありがとうございます。 >(実際には使用される漢字コードによって変わるのでNo.1さんの回答の方がよろしいかと) これで出来ました。

関連するQ&A

  • preg_replace 英数字以外の文字の前後のスペースを削除

    preg_replaceで 英数字の前後いずれかのスペースは残して それ以外のスペースを消したいのですが あ a間が消えてしまいます。(英数字前なので消さない) a aはのこるので英数字後のスペースは残せてます。 <?php $str = \"あ a a\"; $txt = preg_replace(\"/([^a-zA-Z\\d])\\s+/u\", \"$1\", $str); echo $txt;

    • ベストアンサー
    • PHP
  • preg_match関数で4-16桁の英数字かどうかをチェックしたい

    こんにちは☆ PHPでログインIDの入力フォームを作成していて、ユーザーの入力した文字が半角英数字のみで4桁以上16桁以内であるかどうかをpreg_match関数を用いてパターンチェックしたいのですが、うまくいきません。 (全角かな等が入っていてもtrueが返ってしまう。) どなたかご存知でしたらご指摘下さいm(_ _)m -------------------現在までの状況------------------------------- $login_id = $_POST["POSTされたユーザ入力"]; $login_id = mb_convert_kana($login_id, "a"); if (!preg_match("/[a-zA-Z0-9]{4,16}/", $login_id)) { echo "エラーメッセージ"; } ----------------------------------------------------------------

    • ベストアンサー
    • PHP
  • 入力されたテキストからメールアドレス抽出するPHP

    入力されたテキストからメールアドレス抽出するPHPを作りたいのですが、下記の記述では抽出ができません。 どのように文を変えたら抽出できるでしょうか?よろしくお願い致します。 <form action="mail2.php" method="post"> <input type="text" name="text" size="100" value=""/><br /> <input type="submit" name="text" value="テキストからアドレスを抜き出す" /> </form> <?php if( preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$text,$match)); echo "アドレス-> {$match[0]}\n"; print $arr_str[0];  ?>

    • ベストアンサー
    • PHP
  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • IPアドレス拒否処理の正規表現とstr_repla

    下記のようなサンプル(の一部)があるのですが、IF文の条件式の意味が分かりません。 while ( $out = $db->fetch_result($result) ) {  $out['ip_addr'] = stripslashes($out['ip_addr']);  if ( !$ip_banned && preg_match('#^'.str_replace(array('\*', '\?'), array('[0-9]*', '[0-9]'), preg_quote($out['ip_addr'])).'$#', $ip_addr) )  $ip_banned = true; 分解してみました。 ・if ( A ) ・A … !$ip_banned && B ・B … preg_match('#^'.C.'$#', $ip_addr) ・C … str_replace(array('\*', '\?'), array('[0-9]*', '[0-9]'), preg_quote($out['ip_addr']) クオートしたIPアドレスに、「*」か「?」があれば、「数字*」か「数字」に置き換える? さらに、その結果が、$ip_addrの中に、当てはまるか、確認? 意味が分かりません……。 IF文の条件式で、何をしようとしている(と想定される)か、教えてください

    • ベストアンサー
    • PHP
  • preg_match()の使い方

    PHPのpreg_match()でメールアドレスが対象のドメインに所属するかどうかをチェックするスクリプトを作成しようと以下を作成しました。 $ptn = preg_quote("abc.co.jp$"); $str = "user1@abc.co.jp"; $cnt = preg_match("/$ptn/", $str, $matches); 予定では上記で$cntに1が入ると考えていたんですが、 0が返ってきてしまいます。 preg_match()の使い方が誤っているのでしょうか? すいませんが、よろしくおねがいします。

    • 締切済み
    • PHP
  • 正規表現の文字化け?で困っています。

    preg_matchで、条件を変数で定義したいのですが、うまくいきません。 すみませんが、教えてください。 $str = "hoge.php?a=10&b=3"; から"a=10"をマッチさせる場合。 preg_match('/^(.*(\?|&))(a=.*)(&.*)*$/', $str); で、一応うまくいきます。 マッチ条件を状況により変更させるため、まずは、 $con = "'/^(.*(\?|&))(a=.*)(&.*)*$/'"; preg_match($con, $str); のようにしたいのですが、なぜかマッチしてくれません。 すみませんが、対策方法の分かる方がいらっしゃましたら、ご教授の程、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現の\\が認識されない?

    現在、PHPで正規表現を用いてURLをホスト名・パス名・クエリー部分を分けて出力するPGを作成しているのですが。 どうやら、'\\'が'\'(バックスラッシュ)として表現できていないようなのですが? なぜでしょうか? ご教授お願いいたします。 【PG】 $regexが正規表現内容 ↓ $regex = '/^(?:https?|ftp):\/\/([-.!~*\'()\w;:\@&=+\$,%#]+)\/?([-.!~*\'()\w;\/:\@&=+\$,%#]*)\??([\\-.!~*\'()\w;\/:\@&=+\$,%#]*)$/'; if( preg_match($regex, $str, $match) ) { echo $match[1]."\t".$match[2]."\t\n"; } else { echo "URLではありません。\n"; }

    • 締切済み
    • PHP
  • 正規表現のコーディングについてお願いします。

    こんにちは、よろしくお願いいたします。 正規表現パターンを書く場合に皆さんがどのようにされているか教えてください。 例えば(ちょっとムリヤリ感が強いですが)、'Price \5800-' という文字列の \5800 の部分に preg_match でマッチさせたいとします。 単純に考えると、 /\\\d+/ のようなパターンが思いつくのですが、それを文字列として preg_match に渡す際に、コードはどのように書かれますか? <?php   $str = 'Price \5800-';   //とりあえず、'/\\\d+/' と書き、'/\\\\\\d+/' と、\ をそれぞれの \ に書き足す   if ( preg_match('/\\\\\\d+/', $str, $match) ) {     print_r($match);   } ?> 「まず、パターンを書き、全ての \ の前に \ を書き足す。」というのが無難なのかな?と思い、そうしていますが、 そういった考え方で間違っていないでしょうか? どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • preg_matchと定数について

    preg_matchと定数について $string = "○○ドメイン"; if (preg_match("/$string/", $_SERVER['SERVER_NAME'])) {  echo "○"; } else {  echo "✕"; とやると○になるのですが、 define("DOMAIN", "○○ドメイン"); if (preg_match("/DOMAIN/", $_SERVER['SERVER_NAME'])) {  echo "○"; } else {  echo "✕"; } とすると、✕になります。 なぜでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう