アプリ版:「スタンプのみでお礼する」機能のリリースについて

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とも試しましたが同じでした。そもそも常にマルチバイト関数を使うべきとか…?
解説していただける方、よろしくお願いいたします。

A 回答 (2件)

preg_matchはUTF-8の場合のみマルチバイトに対応しています。


パターン識別子のuオプションの指定が必要です。

その他の文字コードについてはmb_eregを使うのが妥当でしょう。

参考URL:http://jp2.php.net/manual/ja/reference.pcre.patt …
    • good
    • 0
この回答へのお礼

ありがとうございます。
そうですか。マルチバイトが出てこないならmb_は蛇足と思っていましたがそんなことないのですね。
勉強になりました。

お礼日時:2008/03/23 01:39

eregはマルチバイト文字に対応していませんし、文字クラスの中での


エスケープは(eregでは)利きません。

マルチバイト文字がデータとしてくる可能性があるなら対応した関数を使うべきでしょう。
まあUTF-8なら対応のものでなくてもあまり痛い目を見ないですむと思いますが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
つまり、mb_ereg() か preg_match() にしておけば問題ない、ということでしょうか?

お礼日時:2008/03/22 01:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!