PHPで全角・半角の判別とエラー表示について

このQ&Aのポイント
  • PHPを使用して、全角・半角の判別とエラー表示を行いたいです。便利な関数や処理方法を教えてください。
  • i18n_ja_jp_hantozenを使用して全角を半角に変換する方法も考えましたが、特殊文字の場合は文字化けの可能性があるため、エラー表示をしたいです。
  • 環境はRedhatLinux6.2J、apache-1.3.12-0jp1、php-3.0.15_i18n_ja-0vl2、postgresql-7.0.2-2.i386です。
回答を見る
  • ベストアンサー

全角、半角の判別

なげられてきた値が全角の場合にエラーをだしたいので PHPにて全角、半角のチェックを行いたいのですが なにか便利な関数などあるのでしょうか? また、どのような処理をすればいいのでしょうか? 単純に全角を半角に変換してくれる i18n_ja_jp_hantozenを使うことも考えましたが 全角の特殊文字などの場合に文字化けを起こす可能性もあると思い なんとかエラー表示させたく質問させていただきました。 よろしくご教授ください。 環境: RedhatLinux6.2J apache-1.3.12-0jp1 php-3.0.15_i18n_ja-0vl2 postgresql-7.0.2-2.i386

  • kanpo
  • お礼率86% (13/15)
  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.1

半角文字が・・・とおっしゃられてますが、半角文字自体の定義が結構曖昧です。 表示上で半角表示されても、実際の文字コード上では2バイト文字の場合もありますので・・・ 実際、EUCでは半角カナも2バイトコードに割り当てられるようですし、UTF8では当然のごとく2バイト使用します んで、とりあえず、どんな文字であれ、バイト列には変わり無いわけなんで・・・ # ソースコードはEUCで保存。別の文字コードで保存する場合は # i18n_convertの第2引数を変更 if(!mbereg("^[A-Za-z0-9ア-ン]+$", i18n_convert($string, "EUC")) { # 半角以外の文字が存在した場合の処理 } こんな感じで通らないでしょうか? mberegの第一引数は適当に決めたので漏れがたっぷりあると思いますので、文字コード表を参照して適当に埋めてください

kanpo
質問者

お礼

レスありがとうございます。 早速おしえていただきました方法で試したいと思います。 # i18n_convertの第2引数を変更 if(!mbereg("^[A-Za-z0-9ア-ン]+$", i18n_convert($string, "EUC")) { # 半角以外の文字が存在した場合の処理 } のmberegの因数がチェックする文字列になるのですね。 文字コードを眺めながらいろいろ試そうと思います。 ありがとうございました。

関連するQ&A

  • PostgreSQLのデータ

    PHPにてデータの入っていないテーブルに対して”pg_result”の処理をすると ”Warning: 0 is not a PostgresSQL result index”という 警告文が出てしまいます。 これを何とか回避したいのです。 また、最悪警告文のみ(Error文ではなく)表示させないようにできればいいのですが方法が分かりません。 お分かりになられる方おりましたら、よろしくご教授ください。 環境: RedhatLinux6.2J apache-1.3.12-0jp1 php-3.0.15_i18n_ja-0vl2 postgresql-7.0.2-2.i386

  • 文字列の置換について

    こんにちは、kanpoと申します。 今回文字列の置換についての質問をさせていただきたいと思います。 やりたいことは以下のとおりです。 たとえば、あるStringデータに”あかさた#1728なはま#7586やらわ”などという 文字列が入ってるとします。 この文字列のなかから"#1728"と"#7586"を検索しそれぞれを #1728 → test #7586 → test2 と変換し最終的にもとのStringデータを ”あかさたtestなはまtest2やらわ”としたいのです。 説明が長くなってしまい申し訳ありませんがよろしくご教授ください。 環境は下記のとおりです。 RedhatLinux6.2J apache-1.3.12-0jp1.i386 php-3.0.15_i18n_ja-0vl2.i386

    • ベストアンサー
    • PHP
  • 全角半角あわせて3文字

    全角半角が混在している文字列の左から3文字を取得したい場合にいい方法はないでしょうか? mb_substr関数で第3パラメータはバイト数で指定するようです。 関数リファレンスでは「最大文字数」って表現になってます。 http://php.net/manual/ja/function.mb-substr.php 半角なら文字数=バイト数ですが、全角だと指定の半分の文字数になります。 最大だから間違ってはないですが、文字数じゃないよな‥‥っていつも思ってます。 いったん半角→全角にして、6バイト分を切り出すのはできます。 でも、英数字も全角半角混在してるので元の文字列を壊したくないのです。 mb_substrの第3パラメータを6から3まで、mb_strlenが3になるまで回すのもやってみました。 でも、なんかスマートじゃないんですよ‥‥。 なにかこう、スマートないい手はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 半角が見やすく半角全角比率が2対1のフォント

    プログラミングで見やすいフォントを探しています。 これまでデフォルトでインストールされているものや、人気の高いものを入れて確認してみました。  Ricty Diminished  Myrica  VLゴシック  Source Han Code JP  など そして気に入ったのがSource Han Code JPです。 どうも自分としては半角英数字が縦長より真四角に近いほうが好みのようです。 6つぐらい太さなどが違うのを選択できるのも気に入っています。 ただ残念なのが半角3文字に対して全角2文字という比率になっていることです。 これだと見た目を各行で揃えたいときに合わない場合があり、合わせるのにも無理やりだったり手間がかかったりします。 そこでSource Han Code JPと同じ半角文字で、かつ半角全角比率が2対1の全角を備えたフォントはないものでしょうか。

  • 【ActionScript】全角半角の判別はできますか?

    FLASH8(Win-XP)使用者です。 ActionScriptで、ある一文字が全角なのか半角(1バイト文字)なのかを判別する方法はあるのでしょうか? PHPとかだと文字をバイト数で数えたりできるようですがActionScriptはそういう機能はないですよね? お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 全角、半角文字の判別について

    フォームのテキストで全角なら10文字まで、半角なら20文字まで入力できるようにしたいのですが、EUCの場合、半角カナは2バイトになるため、バイト数で制限をかけるとうまくいきません。かといって文字数で制限をかけてもうまくいきません。 何かいい方法はあるでしょうか?

    • ベストアンサー
    • PHP
  • 文字列前後の「全角空白/半角空白/改行文字」を取り除く

    PHPで、「文字列の前後に付加されている全角空白/半角空白/改行文字を取り除く」 という処理をしたいのですが、以下のように置換処理を書くとうまくいきません。 $after = preg_replace('/^[  \r\n]*(.*)[  \r\n]*$/u', '$1', $before); // [  \r\n]→[半角空白、全角空白、改行文字]です どううまくいかないのかといいますと、入力として半角スペース+全角文字が入ったときに、全角文字の先頭文字が文字化けしてしまいます。 たとえば、 <半角スペース>あああ をこれにかけると、 <よくわからない文字>ああ となります。 以下のように2回に分けてみると、正常に動きます。 $tmp = preg_replace('/[  \r\n]*$/u', '', $before); $after = preg_replace('/^[  \r\n]*/u', '', $tmp); 最初のように1回の正規表現による置換で済ませたい場合、 どのように書くのが適切なのでしょうか? PHPのバージョンは5.2.3です。

    • ベストアンサー
    • PHP
  • 全角から半角に変換する

    Javaで、文字列の中に全角があれば単純に半角に変換するような処理をしたいです。具体的には、次のような文字列があった場合、以下のように変換したいです。 <変更前> あ亜アアaaAA11%% <変更後> ア亜アアaaAA11%% つまり、以下のようにしたいです ・全角ひらがな→半角カタカナ ・漢字:何もしない ・全角カタカナ→半角カタカナ ・半角カタカナ:何もしない ・半角アルファベット→何もしない ・全角アルファベット→半角アルファベット ・半角数字→何もしない ・全角数字→半角数字 ・半角記号→何もしない ・全角記号→半角記号 上記のように書くと複雑に見えますが、要は基本的に半角に相当する文字がある場合には半角にしたいだけです。Googleで探してみましたが、Javaで標準で上記のような処理を出来るようなメソッドを見つけることができませんでした。このようなメソッドは標準で存在しますでしょうか? 自作する場合、いくつかアプローチがあると考えられますが、最もパフォーマンスを速くしたい場合にはどのような作り方にした方がよいでしょうか。お手数ですが、宜しくお願いします。 <追伸> プレビューで見たら、半角の文字が全角に自動的に変換されてしまいました。。 例文からはわかりにくいかも知れませんが、宜しくお願いします。。

    • ベストアンサー
    • Java
  • フォントの半角・全角について

    フォントの半角・全角について、もしご存知のかたがいらっしゃいませいたら、どうぞお教えください。 Word2000、IME2000で文章を作成する際、等幅フォント(MS-ゴシック)を使っております。 このとき、全角の数字を10個並べた場合は 半角の数字を20個並べたときと同じ幅になると思っていたのですが、 行の右端で、やはり半角数字が少しはみ出てしまいます。 これは、文字と文字の間の空白の関係で仕方ないことなのでしょうか? 以前、ワープロを使っていた際には、 半角といえば全角の文字の幅のきっちり半分だったのですが、 パソコンの場合はこれは不可能なのでしょうか? また、数字に関して、「半角」「全角」という表現はおかしいのでしょうか。 「直接入力」と「全角」という表現が適切なのでしょうか。

  • 全角→半角

    こんにちわ フォームから入力された$titleに全角英数文字が入力された場合 半角に統一したいのですがどうすればよいでしょうか?

    • ベストアンサー
    • Perl

専門家に質問してみよう