• ベストアンサー

正規表現について

お世話になります。 いろいろ調べてテストもしたのですが、 どうしてもわからないのでヒントをください。 やりたいことは、PHPでパスワードチェックを したいのです。 a-z A-Z 0-9 _- 以外の文字が入ったらエラーを返したい のですが、方法がわかりません。 そもそもpreg_matchをつかうのか、eregを使うのか・・・ どうか、よろしくお願いします。

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

たとえば preg_match("/[^a-z0-9_-]/i",$str) eregは遅いのでpreg_matchを使うように・・・という記述がよくでていますね

123daa
質問者

お礼

ありがとうございます。 なんとかひとつだけ動き出しましたので、 これをきっかけに覚えていきます。

関連するQ&A

  • エスケープ文字そのものにマッチさせる正規表現

     お世話になっております。  PHPの正規表現でエスケープ文字\そのものにマッチさせる正規表現がなかなか作れません。Perl互換のpreg_replaceなども試してみましたがダメでした。エスケープ文字そのものを削除したいのですが、どうしたらよいでしょうか? $value = ereg_replace ('\\', '', $value);//ダメでした。 $value = preg_replace ('/\\/', '', $value);//同様にダメでした。 $value = preg_replace ('/[\\]/', '', $value);//同様にダメでした。  文字列中に\が入っていたり、単独で\があった場合は必要ないので削除するといった感じです。 $value = ereg_replace ('[][}}{)(!"#$%&\\~|*+,/\^\'<>`;:?\\=]', '', $value); これでいけるかと思ったのですが、\だけ残ってしまいます。最後辺りの\\で\文字それ自体にマッチするかと思うんですが…。 わかる方がいらしたらおしえてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP、正規表現の使い方

    PHPで特定の文字列から特定の文字までを削除したいのですが、 正規表現を使うということはわかりましたが、どのようにしていいかがいまいちわかりません。 http://www.sample.php?a=test&b=ex&c=sample という文字列があったとして、 &b=exを取り除きたい場合はどのようにしたらいいのでしょうか。 mb_ereg_matchを使用しようと思っていますが、 その他の方法があればそちらも教えてください。

    • ベストアンサー
    • PHP
  • 【PHP】ereg() で文字種判定するときエラーになる

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

    • 締切済み
    • PHP
  • [正規表現]メールアドレスのチェックについて

    メールアドレスのローカル部に不正な文字が使われていないかをチェックするものを作成しましたが、許可されるはずの'(シングルクォーテーション)だけがNGになってしまいます。 環境はPHP5、ソースは下記のとおりなのですがアドバイスいただけないでしょうか。 <認める文字> a-z A-Z 0-9 ! # $ % & ' * + - / = ? ^ _ ` { | } ~ <チェック部分のソース> preg_match("/^\s*[-\w._!#$%&\'*+\\/=?^`{|}~]", $add_local) <現象> テストで「!#$%&'*+-/=?^_`.{|}~」をチェックするとNG '(シングルクォーテーション)を消した同アドレスはOK

    • 締切済み
    • PHP
  • 正規表現について

    いつもお世話になっております。 早速ですが質問させていただきます。 「数字」+最後に「>」が入力されているかチェックしたいと 思っております。 ereg("[^0-9+$>]", $val) とやってみたのですが、ダメでした。 数字の部分は小数点になることもあります。 値として考えられるのは以下のものです。 それ以外(例えば、「12>3」のように間に「>」が入力された場合など)は、エラーとしたいと思っております。 ・123.4 ・12.3 ・1.2 ・123.4> ・12.3> ・1.2> ・1> ・12> ・123> ・1234> よろしくご教示お願いいたします。 <環境> PHP:4.4.2

    • ベストアンサー
    • PHP
  • PHPの正規表現について

    // URLエンコード $str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $str =~ tr/ /+/; これをPHPの関数を使った方法と使わなかった方法が知りたいです。 また、正規表現で、ereg.., preg.., mb_eregがありますが、この違いの詳細が知りたいです。

    • ベストアンサー
    • PHP
  • PHPの正規表現eregの使い方

    PHP初心者です。 eregを使った入力チェックをしたいのですが、思うように処理できません。 入力は半角英数字のみを受け付け、その他の入力の場合はエラー処理を行いたいと思ってます。 if (!ereg("^[0-9]+$", $user)) { // 半角英数字以外はエラー処理 } 参考のものがあったのでその通りやってみましたが、全角文字も受け付けてしまい困っています。 記号の意味もよくわかりません。 また、これに加え5文字以上8文字以内という条件も付けたいです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • 正規表現かsplit、foreachのどれかでエラーになる

    MySQLのデータを並び替える文を作っています if(preg_match("_","$_GET[o]")){ $row = split("_","$_GET[o]"); }else{ $row = "$_GET[o]"; } foreach($row as $val){ ...... } このように書いたり、1行目のpreg_matchをeregに変えたりするとpreg_matchのところなのかsplitなのかそのあたりでエラーが出ます。 $row = split("_","$_GET[o]"); foreach($row as $val){ ...... } このように変えるとsplitが実行されたときにエラーになります(_がないときはスルーで問題なし) なので、おそらく$rowの型なのなんなのか分かりませんが、それが良くないと思うのですが、これはどうすればエラーが出なくなるのでしょうか。 エラーそのものの内容は少し先の ところが対象と思われる mysql_fetch_array(): supplied argument is not a valid MySQL result resource となるのですが、これはforeachのなかでMySQLのOrder by文節をまとめているので、それが影響してのことだと思います。 つまりは、foreachにかける$rowの問題だと思うのですが・・・ どなたかお分かりの方ヒントをください。 perl(MySQLは触らず)からphp&MySQLへの乗り換え中でphpは初心者です

    • 締切済み
    • PHP
  • PHP 正規表現

    はじめまして^^ 現在、PHPでプログラムを作っています。 そして、文字列の置き換えをする機会があり、 正規表現をつかうことになりました!! 置き換えに使う関数は、mb_ereg_replaceです! ある条件にあった部分の文字列を置き換えしたいと思っています。 そして、いろいろとやっていきましたら、あるひとつの壁にぶつかりました。。 例えば、PHPでは、正規表現の部分を [^文字]とやると、『文』と『字』という文字列以外にマッチという意味になるらしいのですが、 『文字』という文字列以外にマッチ、というふうに、表現したい場合は、 どう表現すればよいのですか? [^(文字)]とか、その他いろいろ、 自分なりに、色々ためしたのですが、うんともすんともいいません、、 どなたか、わかる方教えて下さいm(_ _)m

    • ベストアンサー
    • PHP
  • 正規表現について

    PHP5.2.4を使用しています。 任意の数の引数がある文字列をpreg_matchを使ってマッチさせたいのですが、 例えば"ENUM(ab,cd)"は ab と cd の2つの引数があるとします。 次のようなパターン文字列まではアイデアとして浮かんだのですが、 引数の最後は , がないので当然ですがマッチしません・・・ どのようにパターン文字列を記述すれば良いのでしょうか? $str = "ENUM(ab,cd)"; if (preg_match("/ENUM\(([^\,]+\,)+\)/", $str, $match)) { print "{$match[0]}<br>\n"; }

    • 締切済み
    • PHP

専門家に質問してみよう