- ベストアンサー
日本語(2byte文字)の判別方法について【PHP4】
こんにちは。よろしくお願い致します。 メールアドレスの入力チェックで 日本語(2byte文字)が入力されたら エラーを返すようにしたいのですが どのようにすればよいかわかりません。 マニュアルのマルチバイトに関する辺りを 読んでみたのですが、 それらしい関数をみつけることができませんでした・・。 アドバイスよろしくお願い致します。 環境:国際化版PHP 4.2.3
- みんなの回答 (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"; が実行されます。 完全なメールアドレスチェックは複雑なので もっと詳しい正規表現が必要になりますが、 ひとまず上で確認してみてください。 何が必要なのかが分かると思います。
その他の回答 (1)
- duckling
- ベストアンサー率47% (88/185)
ereg で、正規表現を使ったらどうでしょうか。 「半角英数のみを許可しよう」という、逆転の発想で。(笑 [^0-9a-zA-Z]で、半角英数のみです。 ereg("正規表現",$str) PHP ereg 正規表現 で検索してみたらいろいろ出て来ますよ。
補足
回答ありがとうございます。 正規表現で試してみたのですが 正確にはチェックできないようです。 例えば下記のチェックロジックで 「あああ@あああ.あああ」はNGですが 「あw@ww.jp」はOKという結果になります。 ----- if (ereg("[a-zA-Z0-9]".'@'."[a-zA-Z0-9]",$mail)){ print ("OK") ; }else{ print ("NG") ; } ----- もし何か良い方法がありましたら教えてください。
お礼
正規表現についてもっと勉強してみようと思います。 丁寧な回答ありがとうございました。