• ベストアンサー

日本語(2byte文字)の判別方法について【PHP4】

こんにちは。よろしくお願い致します。 メールアドレスの入力チェックで 日本語(2byte文字)が入力されたら エラーを返すようにしたいのですが どのようにすればよいかわかりません。 マニュアルのマルチバイトに関する辺りを 読んでみたのですが、 それらしい関数をみつけることができませんでした・・。 アドバイスよろしくお願い致します。 環境:国際化版PHP 4.2.3

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

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

  • ベストアンサー
  • duckling
  • ベストアンサー率47% (88/185)
回答No.2

ereg("[a-zA-Z0-9]".'@'."[a-zA-Z0-9]",$mail)) ↑これでは、@ を挟んで前と後ろに 「1つでも半角英数が入っていれば」 true が返り、OKになります。 > 「あw@ww.jp」はOKという結果になります。 あw ←この、w があるゆえに、trueが返るわけです。 #メールアドレスに使われている文字以外が入っていた場合はNGとprintする。 if(ereg("[^0-9a-zA-Z\.\@\-\_]",$mail)){ print "NG"; } else{ print "OK"; } 頭に ^ を付けて、 候補以外の文字が含まれていたら true が返り、 print "NG"; が実行されます。 完全なメールアドレスチェックは複雑なので もっと詳しい正規表現が必要になりますが、 ひとまず上で確認してみてください。 何が必要なのかが分かると思います。

BottleCap
質問者

お礼

正規表現についてもっと勉強してみようと思います。 丁寧な回答ありがとうございました。

その他の回答 (1)

  • duckling
  • ベストアンサー率47% (88/185)
回答No.1

ereg で、正規表現を使ったらどうでしょうか。 「半角英数のみを許可しよう」という、逆転の発想で。(笑 [^0-9a-zA-Z]で、半角英数のみです。 ereg("正規表現",$str) PHP ereg 正規表現 で検索してみたらいろいろ出て来ますよ。

BottleCap
質問者

補足

回答ありがとうございます。 正規表現で試してみたのですが 正確にはチェックできないようです。 例えば下記のチェックロジックで 「あああ@あああ.あああ」はNGですが 「あw@ww.jp」はOKという結果になります。 ----- if (ereg("[a-zA-Z0-9]".'@'."[a-zA-Z0-9]",$mail)){ print ("OK") ; }else{ print ("NG") ; } ----- もし何か良い方法がありましたら教えてください。

関連するQ&A

  • PHPマルチバイト文字列関数

    FedoraCore4のPHP-version5.0.4 rpmをインストールしたのですが、マルチバイト文字関数が標準になっていないのでマルチバイト文字関数が使えるようにしたいのです。 今のところ一度PHPをアンインストールして、ソースを落としてきて、configureの時にオプションで指定して対応しようかと考えています。 しかし、超初心者ですのでもう少し簡単な方法を探しています。ご存知の方はぜひご教授いただきたいと思います。 よろしくお願いいたします。

  • PHP日本語対策

    PHP5とpostgreSQLで作成しているWEB登録システムを設計し、開発者に開発してもらっています。 英語のページなので、日本語が入力されるとエラーにしたいと思っております。 しかし、開発者がいうには、PHPでいかなる日本語をはじくチェックをかけても、通りぬけてしまうようです。しかも、こちらで用意しているpostgreSQL環境では、日本語を登録するときにエラーになってしまうとのことです。PHPで文字コードをsjisにしていることが原因といわれてしまいました。 質問は、 PHPでは日本語が入力できないようにすることは不可能なのでしょうか。 また、PHPのdefault charsetをsjisに指定するのは、英語のページを作成するのに不適切なのでしょうか。

    • ベストアンサー
    • PHP
  • BCB5 日本語の1バイト目のチェック

    Borland C++ Builder5 を使っています。 日本語の1バイト目(または2バイト目)のチェックをしたいと考えています。 nthctype()関数を使えば良さそうなのですが、jstring.hをincludeしても、リンカエラーとなってしまいます。 他に何をincludeしたら良いのでしょうか? あるいは、nthctype()関数にこだわらず、1バイト目の判定が出来る方法があったらご指導いただければ幸いです。 要は、ある文字が、日本語の1バイト目であるか、2バイト目であるか、それ以外であるかが分かればOKです。 なお、文字はS-JISで作成されています。

  • mb_strlenはマルチバイト文字数をカウントしてくれるはずですよね?

    PHP初心者です。よろしくお願いします。 入力フォームから入力された名前を、下記のコードで エラーチェック行い、結果的に100文字以内の入力を許すように したいです。 if(isset($check_data["name"]) && trim($check_data["name"])=== ""){ $er[] = "お名前を入力して下さい。"; } elseif(mb_strlen($check_data["name"],'SJIS') > 100){ $er[] = "50文字以内でご入力下さい。"; } でも、100文字より大きくなれば・・・と判定しているのに、 51文字以上の入力で判定を受けてしまいます。 マルチバイト(2バイト)のちょうど半分です。 mb_strlenを使用しているのに、なぜ、マルチバイトの文字数を返してくれないのでしょうか? ちなみに上のコードは、>100 としつつ、出力分は50文字以内としております。 なんだかすっきりしません。

    • ベストアンサー
    • PHP
  • 【PHP】常にマルチバイト文字列関数でいいですか?

    PHP初心者です。バージョンは4です。 文字を扱う関数はマルチバイト対応と非対応があるみたいですがその使い分けがわかりません。いっそ常にマルチバイト対応にしとけばいいのではと考えてしまいますがどうなのでしょう?たとえば、置換の場合、 preg_replace と str_replace がありますが、常に preg_replace を使っていて問題はないのでしょうか? お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 日本語が文字化けするんです。

    WINDOWS2000を使用しています。apache_1.3.26 php-4.2.2でプログラムを作成し始めた初心者です。テキストエディタで文章の中に日本語を入れてphp文書として保存し、ブラウザで見たら日本語の部分が文字化けしてたり消えてたりするんです。どうやら、phpのマルチバイト関連の設定に不備がある、というらしいのですが、詳しく分からないので、どなたか詳しい方教えて下さい。宜しくお願いします。

    • 締切済み
    • PHP
  • PHPのWeb登録システムの日本語対策

    PHP5とpostgreSQLで作成しているWEB登録システムを設計し、開発者に開発してもらっています。 英語のページなので、日本語が入力されるとエラーにしたいと思っております。 しかし、開発者がいうには、PHPでいかなる日本語をはじくチェックをかけても、通りぬけてしまうようです。しかも、こちらで用意しているpostgreSQL環境では、日本語を登録するときにエラーになってしまうとのことです。PHPで文字コードをsjisにしていることが原因といわれてしまいました。 質問は、 PHPでは日本語が入力できないようにすることは不可能なのでしょうか。 また、PHPのdefault charsetをsjisに指定するのは、英語のページを作成するのに不適切なのでしょうか。

  • VC++で日本語(マルチバイト)ファイルの読み込み

    VC++で日本語(マルチバイト)の文字が含まれているファイルを読み込もうと思っています。 例えばunicodeのファイルとして下記の内容があるとして、 11111 abcdef いろはにほへと このファイルから1文字ずつ読み込みたいのですが、ヘルプで調べたところfgetwc関数でマルチバイトの読み込みができるということを調べました。 ファイルのオープンは_wfopenを使用しているのですが、テキストモード・バイナリモードでどちらで開いても、fgetwc関数の戻りはファイルを1byte読んだ結果を返します。 半角文字の場合は"1"とか"a"を単純に呼んで、マルチバイト文字であれは"い"とか"ろ"というデータを読み込みたいのですが、どうすればいいでしょうか?

  • phpでアドレス形式をチェックする方法

    http://php.eweb-design.com/1301_mail.html さんからアンケートフォームをダウンロードさせて頂き メールアドレスの形式チェックをかけたいと思っています。 『php アドレス形式チェック』などで検索してみたのですが 単体のコードは出てくるのですが、私がほぼ無知なために どこに付け加えたらいいのかわからずでphpファイルの 未入力項目のチェックのあたりにつけてみましたが エラーの連続で自分ではお手上げ状態でした・・・ アドレス形式チェックを参考にしたのは下記のurlです。 http://homepage3.nifty.com/wowarlly/php2.html 詳しい方のお力を貸して頂きたいのですがどのようにすれば 動作するのでしょうか? 宜しくお願い致します!

    • ベストアンサー
    • PHP
  • php4.0.6で国際化版対応といっていますが

    「日本語関連のモジュールがついにマージ」とか、「日本語用のマルチバイト処理関数が標準でサポートされた」とか言われていますが、日本語に対応したっつうことなのでしょうか。日本語の処理について、国際化版php3.0.18と比較するとどこが違うのでしょうか。

    • ベストアンサー
    • PHP

専門家に質問してみよう