• 締切済み

全角文字と全角スペース

いつもお世話になっております。 全角文字 + 全角スペース + 全角文字 上記以外の場合はエラーにする正規表現を思考しています。 いくつか試してみたのですが、うまくいきません。 -------------------------------------------------- ini_set('default_charset', 'eucJP-win'); ini_set('mbstring.http_output', 'eucJP-win'); ini_set('mbstring.internal_encoding', 'eucJP-win'); 1) if (preg_match('/^[ア-ンあ-ん亜-腕弌-熙]+[ ][ァ-ヶぁ-ん亜-腕弌-熙]+$/', $name)) { 2) if (!mb_ereg("^[ア-ンあ-ん亜-腕弌-熙]+\ [ア-ンあ-ん亜-腕弌-熙]+$", $name)) { -------------------------------------------------- スクリプト自体の文字コードはEUC-JPです。 ただ、正規表現のチェックをする文字列はCSVファイルで アップロードされたもので、Shift-JIS から eucJP-win に置換しています。 eucJP-win にしている理由は、特殊文字の文字化けを防ぐためです。 (ハシゴタカなど・・・) 以前こちらで質問し、回答をいただきました。 http://okwave.jp/qa3274023.html 間違っている箇所、他の方法がありましたら ご教示お願いいたします。 <環境> PHP 4.3.1

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

if (!mb_ereg("^[ア-ンあ-ん亜-腕弌-熙]+ [ア-ンあ-ん亜-腕弌-熙]+$", $name)) { 全角スペースの前の\を削除したら正常に動作しているようでしたが、いかがでしょうか。

wonder_dct
質問者

お礼

hogehoge78 さん、ご回答ありがとうございます。 ご提示いただきましたソースを試してみたのですが 「山田太郎」の場合、エラーになりません。

wonder_dct
質問者

補足

別の方法で以下のようにやってみたのですが 「山田 たろう」のようにスペースの右側がすべてひらがなの 場合エラーになりません。 if (!preg_match("/^([\xb0-\xf4][\xa1-\xfe]|[\xf9-\xfc][\xa1-\xfe]|\x8f[\xb0-\xf4][\xa1-\xfe])+\ ([\xb0-\xf4][\xa1-\xfe]|[\xf9-\xfc][\xa1-\xfe]|\x8f[\xb0-\xf4][\xa1-\xfe])+$/", $name)) {

関連するQ&A

  • 機種依存文字

    いつもお世話になっております。 機種依存文字について質問させていただきます。 CSVファイルをアップロードして、文字コードがEUCのデータベースに 格納したいと思っております。(PHPの文字コードもEUCになっております。) 「(はしごたか)」「(たつさき)」などの機種依存文字が 文字化けをしてしまいます。 $name = mb_convert_kana(mb_convert_encoding($data[1], "EUC-JP", "Shift-JIS"), "KV") $name = mb_convert_kana(mb_convert_encoding($data[1], "eucJP-win", "Shift-JIS"), "KV") としても文字化けをしてしまいます。 また、以下の設定をしても文字化けは解消されません。 ini_set('default_charset', 'eucJP-win'); ini_set('mbstring.http_output', 'eucJP-win'); ini_set('mbstring.internal_encoding', 'eucJP-win'); 皆様、ご提示お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Linux PHP:Version 4.3.1 DB:MySQL 3.23.56

    • ベストアンサー
    • PHP
  • 全て全角文字かチェックしたい

    PHP Version 5.1.6を使っています。 UTF-8だと全角文字が3バイトとして扱われるので、 半角文字のチェックのままだと3倍の文字制限が必要になってしまいます。 例: [名前] 最大全角10文字まで 半角を入力した場合:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 全角を入力した場合:あああああアア亜亜亜 半角文字だと3倍の30文字まで入力できてしまうので、 なんとかして全角文字だけ入力したかチェックする正規表現が知りたいです。

    • ベストアンサー
    • PHP
  • 文字エンコードの設定について

    前回、PHPからデータベースへの登録について質問させていただきました。 今回はデータベースに登録した情報をブラウザ上で呼び出す際の 文字エンコードの設定について質問させていただきます。 お手数おかけいたしますがよろしくお願い致します。 以下、一部は省略していますが動作環境とソースの内容です。     DBサーバー : EUC     Webサーバー : Shift_JIS 呼び出す側のPHP : EUC ▼ dataload.php **************************************************************************** <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> </head> <body> <?php ini_set("mbstring.internal_encoding", "eucjp"); ini_set("mbstring.http_output", "eucjp"); // データベースに接続 ~ 省略 ~ // データベースの選択 ~ 省略 ~ $str_sql = "select * from FORM_DATA"; $sql_re = mysql_query('SELECT * FROM FORM_DATA', $db); while ($data = mysql_fetch_array($sql_re)) { echo '<p>' . $data['DataNumber'] . ':' . $data['Time'] . ':' . $data['Name'] . ':' . $data['Email'] . ':' . $data['Area'] . ':' . $data['Sex'] . ':' . $data['Interest'] . ':' . $data['Comment'] . ':' . $data['OS'] . ':' . $data['IP'] . "</p>\n"; } #$rs = mysql_query($sql_re,$db); #if(!$rs) { # exit('<br /><br />Error! データの呼び出しに失敗しました。'); #} // データベース接続を閉じる $db = mysql_close($db); if (!$db) { exit('データベースとの接続を閉じれませんでした。'); } else{ print "データベースとの接続が切れました。<br />"; } ?> <br />登録データの呼び出し完了しました。<br /><br /> <a href="index.php">最初に戻る</a> </body> </html> ************************************************************************ PHPソースの内容は以上です。 動作的には問題なくDB内の情報が表示されます。 ただし、ブラウザの文字コードが「Shift_JIS」のまま切り替わらず、 ブラウザの文字エンコードを「EUC」に変更しなければ文字化けしてしまう状況です。 <meta>で文字コードを指定し、ini_set()でさらに「EUC」を指定してあるのですが アクセスした時点では文字コードは変わらず文字化けてしまいます。 ini_set("mbstring.internal_encoding", "eucjp"); ini_set("mbstring.http_output", "eucjp"); まだまだ勉強不足で根本的に抜けている点があるかもしれませんが、 可能なら解決策をご教授いただけますと助かります。 よろしくお願い致します。

    • 締切済み
    • PHP
  • Javascript 全角カナ+半角スペース+全角スペースの正規表現について

    初歩的な質問をしてすみません。 一応、自分でも試行錯誤で if (str.match(/[^ア-ンー\- ]+/g)){ alert("フリガナの項目を「全角カタカナ」のみで入力して下さい。"); } という条件を作ってみたのですが、半角スペースを入力したらTrueとなってしまいます。 全角カナ+半角スペース+全角スペース以外はFalseとなる正規表現を教えていただけないでしょうか。 以上、よろしくお願いします。

  • javascriptでJIS第一/第二水準の文字をチェック

    javascriptの初心者です。 フォームのテキストボックスにJISの第一水準、第二水準以外の文字が入ったら エラーを返したく、いろいろ調べたら正規表現で   第一水準:[亜-腕]   第二水準:[弌-熙] と書かれているサイトを見つけて、以下のコードを作成しました。 function nameCheck() { var str = document.form1.name.value; if( str != "") { check = /[^亜-腕弌-熙]+/ if ( str.match(check) ) { alert("使用できない文字が含まれています。"); document.form1.name.focus(); } } } 実際にこれを実行すると、「崎の"大"の部分が"立"」になっている漢字は チェックできますが、「田」「山」と簡単な漢字がエラーとなってしまいます。 これではチェックが出来ないのでしょうか? どなたかご教授願えたらと思います。 どうぞよろしくお願いいたします。

  • 半角スペースを全角スペースに

    文字列で、半角スペースを全角に置き換える方法がわかりません。。。 正規表現が苦手で、MySQLに登録する画面を作りましたが、半角スペースがあると、それ以降が無視されてしまうため、その半角スペースを全角スペースに置き換えたいのですが、書式がわかりません。 すいませんが、ご教授お願いします。 あと、もし全角スペースに置き換える方法以外で何かいい策などもしありましたら、それもよろしくお願いします。

    • ベストアンサー
    • PHP
  • Java正規表現で全角記号

    Javaの正規表現 で「全角記号のみ」というのがどうしてもわかりません。 今Javaでプログラムを作っていてString name が nullの時と、全角記号半角記号スペースのみ、空文字の時に returnをnullにするif文を考えています。 しかし、半角記号と全角記号の正規表現がサッパリわかりません 。とくに全角記号が全くわかりません。 種類が多すぎてきりがないのです。 どうやって表現したらいいのでしょうか? [、-○]などがネットにはありましたが、エラーになります。 どうか教えてください! 追加の詳細が必要なときはコメントいただけましたら返信いたします。 よろしくお願いします。

  • MySQLから送られて来たデータの文字化け

    いつもお世話になっています。 今回、phpでmysqlに接続したのですが、mysqlから引っ張ってきたデータが文字化けして困っています。(日本語のみ文字化け) 使っている環境は以下の通りです。 IIS6.0 PHP 5.0.4 MySQL 4.1.22 IISは、CGI、ASP、ISAPIを許可にしています。(.phpを見れるようになっています。) php.iniのmbstringの設定は以下のようになっています。 1105 mbstring.language=Japanes 1110 mbstring.internal_encoding = EUC-JP 1113 mbstring.http_input = auto 1117 mbstring.http_output = SJIS 1124 mbstring.encofing__translation = On 1128 mbstring.detect_order = auto 1132 mbstring.substitute_charecter = auto 1133 mbstring.script_encoding = EUC-JP my.iniの設定は以下のようになっています。 [mysql] default-character-set=sjis [mysqld] default-character-set=sjis skip-character-set-client-handshake mysqlでコマンドで確認したところ以下のような文字設定になっています。 mysql> show variables like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | sjis | | character_set_connection | sjis | | character_set_database | sjis | | character_set_results | sjis | | character_set_server | sjis | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ character_set_systemがutf-8になっているのが気がかりですが、 こんな感じで設定しています。 mysql内では文字化けしていないのに、 phpで呼び出した時に文字化けするのでしょうか? どなたかご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの文字化け

    PHP4.3.2 Windows2000 PostgreSQL RedHat Linux DBから取得した値をCSVファイルに書き出します。 この時に日本語が文字化けをしてしまうのです。 php.iniの設定を変えれば、良いのでしょうか? 初歩的な質問で申し訳ありませんが、 よろしくお願いします。 php.iniの設定内容 default_charset = "SJIS" mbstring.language = Japanese mbstring.internal_encoding = eucJP-win mbstring.http_input = ASCII,JIS,Windows-31J,UTF-8,EUC-JP mbstring.http_output = Windows-31J mbstring.detect_order = ASCII,JIS,Windows-31J,UTF-8,EUC-JP mbstring.substitute_character = none DBの設定内容 List of databases Name | Owner | Encoding -----------+----------+---------- test | postgres | EUC_JP

    • ベストアンサー
    • PHP
  • PHPとMYSQLの文字コードについておねがいします。

    Apache2、PHP5、MYSQL5.0を使用しています。 当方、PHPの初心者講座などを見てUTF-8で作っていこうと思い設定をしたものの、上手くいかず質問させていただきました。 PHPからQuery文(日本語)を送ってMYSQLのテーブルにINSERTしたのですが、文字化けしてしまいます。 my.iniのdefault-character-set=部分をutf8からsjisやujisなどに変えてやってみたのですが、文字化けの種類(?)が変ってしまうだけでやはり文字化けしてしまいました。 ALTER DATABASE AAA CHARCTER SET utf8をやっても変らず文字化けしてしまい、show variables like 'char%'でCharcterを調べたところ、下記のようになっていました。 charcter_set_client | utf8 charcter_set_connection| utf8 charcter_set_database | utf8 charcter_set_filesystem| binary charcter_set_results | utf8 charcter_set_server | utf8 charcter_set_system | utf8 MYSQLとPHPの文字に関係あるようなところをコピーしました。 どこかおかしなところがあるでしょうか。 ------my.ini----- [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 ----------------- ------php.ini----- output_buffering = Off extension=php_mbstring.dll [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On ------------------ どなたか解決策を知らないでしょうか。よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう