• ベストアンサー

文字列から英数字の判別

PHP で質問です word1変数内に英数字がある場合以外はテキスト(変数名kana1) への入力必須をのエラーをだしたいのですが、うまくいきません。 基本動くのですが、カタカナのチ以降の文字を入れると通ってしまいます。 何かいけないでしょうか? if ($kana1=="") { if(preg_match("/[a-z0-9]+/",$word1)) {}else{ echo "<h2 class="subtitle">ふりがなを入力してください。</h2><br />"; $err_flg = "1"; } }

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

mb_internal_encoding()で正しいエンコードを指定してください。 できればUTFにして、 preg_match()もuを指定してやった方がよいと思います。

tamurad007
質問者

お礼

ありがとうございます しかし状況下わらずです。 やはり カタカナのチ以降の文字を入れると カタカナ チ以降を英数字と判断します。

tamurad007
質問者

補足

すみません。できました。 ファイル自体がsjisでとおりませんでした。単純なミスでした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

うーん・・・通らないと思いますが・・・ <? mb_internal_encoding("UTF-8"); $word1="タチツテト"; if(preg_match("/[a-z0-9]+/iu",$word1)) print "match"; ?>

全文を見る
すると、全ての回答が全文表示されます。
  • think49
  • ベストアンサー率59% (285/482)
回答No.2

^$ がないので部分一致になっています。 if(preg_match("/^[a-z0-9]+$/",$word1))

tamurad007
質問者

お礼

ありがとうございます しかし部分一致で大丈夫です。 変数$word1内に英数字が一文字でもあれば$kana1未入力 エラーチェックをしないで 英数字一文字でもない場合は、$kana1未入力エラーチェックする感じです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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
  • if文でチェックしている内容を教えてください

    メールアドレスをチェックしているif文ですが どんな内容をチェックしているのでしょうか? if (preg_match('/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mailaddress))・・・

    • ベストアンサー
    • PHP
  • 正規表現 半角英数字が混じっている場合

    正規表現について教えてください。 入力フォームより都道府県を入力した際に、 "東京都AAS421SBBss" や "AA1sss東京都" など、一部に半角英数字が含まれている場合、 どのような正規表現でマッチするのでしょうか? if(!preg_match("/[\xA1-\xFE][\xA1-\xFE]/",$address)) 感じで行ったのですが、最初に半角英数字だとマッチするのですが、 途中に半角英数字がある場合、マッチしなかったりと。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 半角英数字の判別

    お世話になります テキストフィールドにおいて半角英数字のチェックをしたいのですが・・・ 例えば『012ab』のような場合、 <script Language="JavaScript"> <!-- function checkText() { txt = document.myFORM.moto.value; if (txt.match(/[^a-z|^A-Z]/g)) alert("アルファベット以外が含まれてます"); } //--> </script> <form name="myFORM"> <input type="text" name="moto"> <input type="button" value="調べる" onClick="checkText()"> </form> では数字が入力されてるとalertされます function checkNum() { txt = document.myFORM.moto.value; for (i=0; i<txt.length; i++) { c = txt.charAt(i); if ("0123456789".indexOf(c,0) < 0) { alert("数値以外が含まれてます"); return; } } } //--> </script> <form name="myFORM"> <input type="text" name="moto"> <input type="button" value="調べる" onClick="checkNum()"> </form> ではアルファベットがあるとalertされてしまいます この2つをどのように組み合わせれば半角英数字以外であればalertされるようになるのでしょうか?

  • PHP 全角・半角・英数字 エラー判定

    PHPを独学で勉強しているものです、あるサイトを構築中で、入力内容のエラー判定をしたいのですが、どうしても半角英字がエラーではじかれず、どなたかご指導いただけますでしょうか。 PHPのバージョンは5.2で、DBはMySQLでユーザーがある情報を登録できるサイトで、データ型にあわせるため、1以上の半角数字のみ受け付けるようにしたいです。 入力欄は3か所で、$ic0、$ic1、$ic2に格納されています。 入力が全角数字の場合はそれぞれを半角数字に自動変換したいとおもっています。 自作したものは下記の通りです。 宜しくお願い致します。 /*エラー判定*/ $ic_check=$ic0.$ic1.$ic2; if(preg_match("/^[0-9]+$/", $ic_check)){ if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[0-90-9]+$/",$ic_check)){ $ic0=mb_convert_kana($ic0, "n", "Shift_jis"); $ic1=mb_convert_kana($ic1, "n", "Shift_jis"); $ic2=mb_convert_kana($ic2, "n", "Shift_jis"); if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[a-zA-Z]+$/",$ic_check)){ $error_msg="半角数字で入力してください"; } else{ $error_msg="半角数字で入力してください"; }

    • ベストアンサー
    • PHP
  • PHPでメールチェックをしたいのですが、空欄だとエラーが返されてしまいます。

    必須項目ではないので、何か入力されたときのみメールチェックをしたいのですが、 function isMailError ( $mail ) { if($mail==null) { return true; } if ( !preg_match( '/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mail ) ){ return true; } else { return false; } } この設定ではうまくいきません。なぜでしょうか? ご指導よろしくお願い致します。

    • 締切済み
    • PHP
  • 設定ファイルを作って、設定ファイルの書き換えでメッセージなどを変更できるようにしたい

    メールフォームのエラーチェックの部分をPHPで作成したのですが、設定ファイルを作成し設定ファイルを書き換えるだけで変更することができる(エラーメッセージ等)ようにするにはどうしたらよいのでしょうか? 1ヶ月以上考えましたが、まったくわかりませんでした。 <PHPファイル> <?php session_start(); if (strlen($_POST["name"]) == 0){ $error_flg = true; $error_messages[] = "名前を入力してください"; } //フリガナのエラーチェック $pat = "/^(\xA5[\xA1-\xF6]|\xA1\xBC|\xA1\xA6|\xA1\xA1|\x20)+$/"; if (strlen($_POST["kana"]) == 0){ $error_flg = true; $error_messages[] = "フリガナを入力してください"; }else if (!preg_match($pat, $_POST["kana"])){ $error_flg = true; $error_messages[] = "フリガナを全角カナで入力してください。"; } $pat = "/^[a-z0-9\-\._]+@[a-z0-9]([0-9a-z\-]*[a-z0-9]\.){1,}[a-z]{1,4}$/i"; if (strlen($_POST["mail"]) == 0){ $error_flg = true; $error_messages[] = "メールアドレスを入力してください"; }else if (!preg_match($pat, $_POST["mail"])){ $error_flg = true; $error_messages[] = "メールアドレスが不正です。"; } if (mb_strlen($_POST["naiyo"]) == 0){ $error_flg = true; $error_messages[] = "問い合わせ内容を入力してください"; }else if(strlen($_POST["naiyo"]) >= 400){ $error_flg = true; $error_messages[] = "問い合わせ内容を全角200文字以内で入力してください"; } if($_POST["counseling"] != "希望する"){ $_POST["counseling"] = "希望しない"; } if ($error_flg == true){ foreach($error_messages as $value){ echo($value."<br>"); } exit(); } $_SESSION["name"] = $_POST["name"]; $_SESSION["kana"] = $_POST["kana"]; $_SESSION["mail"] = $_POST["mail"]; $_SESSION["counseling"] = $_POST["counseling"]; $_SESSION["naiyo"] = $_POST["naiyo"]; require_once("smarty/Smarty.class.php"); $smarty = new Smarty; $smarty->template_dir = "templates/"; $smarty->compile_dir = templates_c/"; $smarty->display("chk_disp.tpl"); /* ファイルの指定 */ $file_name = "sample.csv"; /* CSVファイル用変数の指定(タグを無効にする) */ $void = ""; $name= strip_tags($_POST["name"]); $kana = strip_tags($_POST["kana"]); $mail = strip_tags($_POST["mail"]); $counseling = $_POST["counseling"]; $naiyo = strip_tags($_POST["naiyo"]); /* カンマなどを変換する(それぞれの変数をセット) */ $void = ""; $kanma = ","; $single_quote = "’"; $double_quote = "”"; /* カンマなどを変換する(処理) */ $name = ereg_replace(',',$void,$name); $name = ereg_replace("'",$single_quote,$name); $name = ereg_replace('"',$double_quote,$name); $naiyo = ereg_replace(',',$kanma,$naiyo); $naiyo = ereg_replace("'",$single_quote,$naiyo); $naiyo = ereg_replace('"',$double_quote,$naiyo); /* 配列に格納してCSVファイルにセット */ $array = compact("name","kana","mail","counseling","naiyo"); $csvString = implode(",",$array); $file = fopen($file_name,"a+") or die("OPEN ERROR! $file_name"); flock($file,LOCK_EX); fputs($file, $csvString."\n"); flock($file,LOCK_UN); fclose($file); ?> TPLファイル <html> <head> <title>申し込みフォーム-確認画面- </title> </head> <body> <p>下記の内容でよろしければ送信ボタンを押してください。</p> <hr> <form action="disp_fix.php" method="post"> <table> <tr> <td>お名前:</td> <td>{$smarty.post.name}</td> </tr> <tr> <td>フリガナ</td> <td>{$smarty.post.kana}</td> </tr> <tr> <td>メールアドレス</td> <td>{$smarty.post.mail}</td> </tr> <tr> <td>カウンセリング:</td> <td>{$smarty.post.counseling}</td> </tr> <tr> <td>お問い合わせ内容:<br>(※必須 全角200文字以内)</td> <td>{$smarty.post.naiyo}</td> <tr> <td colspan=2 align=center><input type="submit" value="送信"></td> </tr> </table> </form> </body> </html>

    • 締切済み
    • PHP
  • 文字列の置き換えについて

    下記のようなテキストファイルを読み込みます。 【お名前】 {@name} 【フリガナ】 {@kana} 【年齢】 {@age} そしてphpでこのようにしました。 $test = array( 'name' => '名前太郎', 'kana' => 'ナマエタロウ', ); $file = 'body.txt'; $body = file_get_contents($file); foreach ($test as $key => $val) { if ( is_array( $val ) ) { foreach ( $val as $val2 ) { $body = preg_replace( "/{@$key}/u", implode(',', $val), $body ); } } else { $body = preg_replace( "/{@$key}/u", $val, $body ); } } echo $body; 結果は、@nameと@kanaは配列にある通りの文字列に変わりますが@ageは そのまま表示されてしまいます。 $testの配列で該当するパターンがない場合には@hogeの値を空白にしたいのですが どうすればいいでしょうか? foreachを$testで行っているのでループ内ではできないような気がしています。 いい方法があれば教えてください!

    • ベストアンサー
    • PHP
  • 正規表現での英字+ハイフンのセット部分一致判定方法

    PHP5の正規表現で「999-999」形式か「999-A-999」形式のみ 入力可能としたいです。 ※「9」…数値、「-」…ハイフン if (!preg_match("/^[0-9]{3}-[A-Z]{0,1}[-]{0,1}[0-9]{3}$/", $abc)) { … とすると 「A-」の部分がセットになっていないため 「999-A999」も入力可となってしまいます。 OR判定でIF文を追加する方法ももちろんありますが、 [A-Z]{0,1}[-]{0,1}の部分をあくまでもセット判定する方法があれば教えてください。 何卒よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 【PHP】ereg() で文字種判定するときエラーになる

    PHP5使用者です。 ereg() でよくわからないエラーに直面して悩んでおります。 例えば、サンプル文字列が半角数字a~z又は -(ハイフン)のみで構成されているか調べたい場合、以下の方法を試しました。 1)if( ereg("^[\-a-z]+$", $str )){ 2)if( ereg("^[a-z-]+$", $str )){ 3)if( mb_ereg("^[\-a-z]+$", $str )){ 4)if( preg_match("/^[\-a-z]+$/", $str )){ 但し $str はシングルバイト文字です 結果、1)のみエラーになります。-をエスケープしているのになぜでしょうか? 文字コードはShift_JIS、EUC-JP、UTF-8とも試しましたが同じでした。そもそも常にマルチバイト関数を使うべきとか…? 解説していただける方、よろしくお願いいたします。

    • 締切済み
    • PHP