ここから本文です

PHPの正規表現について 現在、PHPのバージョンは7.2.1を使ってます。

pro********さん

2018/7/2216:01:16

PHPの正規表現について

現在、PHPのバージョンは7.2.1を使ってます。

preg_match関数を使って、
パスワードの形式と文字列があっているか
確認するプログラムを作成しました。

入力画面でうった文字($password)を
POSTで別プログラムで引き継ぎ判定する内容です。

関数の引数の意味が全てわかりませんでした。

preg_match("/^[a-z][a-z0-9_]{2,7}$/i",$password)

<理解したこと>
^[a-z] 先頭がアルファベットのどれか一文字
[a-z0-9]_{2,7} アルファベットか数字 3文字から8文字以内
i 大文字、小文字の区別をしない

<質問>
①ネット上で半角英数字のチェックは
a-zA-Z0-9と記載しているサイトも有りましたが、
バージョンによって異なるのでしょうか?

②2,7}$の$の意味あいがわかりませんでした。
どういう用途で書いているのでしょうか?

閲覧数:
34
回答数:
3

違反報告

ベストアンサーに選ばれた回答

nov********さん

編集あり2018/7/2216:21:52

> ①ネット上で半角英数字のチェックは
a-zA-Z0-9と記載しているサイトも有りましたが、
バージョンによって異なるのでしょうか?

どちらでも構いません。

[a-z0-9]
と書いたのであれば、小文字と数字しか見ないことになります。しかし、/iで大文字と小文字を区別しないので、これで英数になります。

ただし、[a-z0-9_]なので、英数とアンダーバー(_)です。

[A-Za-z0-9]
と書いたのであれば、大文字と小文字と数字を見ていることになります。
/iは大文字と小文字を区別する、なので、この場合は、iはないはずです。

> ②2,7}$の$の意味あいがわかりませんでした。
どういう用途で書いているのでしょうか?

$は行末です。
この場合は、パスワードの終わりのパターンを指定したことになります。
$をつけない場合、パスワードの途中のどこかが一致すればOK, という意味になります。

  • 質問者

    pro********さん

    2018/7/2216:28:16

    ありがとうございます。

    >$をつけない場合、パスワードの途中のどこかが一致すればOK
    これはわかりました。

    >$は行末です。この場合は、パスワードの終わりのパターンを指定したことになります。

    私が書いているパターンの場合、
    パスワードが一致しててもしてなくても
    最後まで判定を行うということですか?

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

fil********さん

2018/7/2223:50:59

1、preg_match(';^[A-Za-z][A-Za-z0-9_]{2,7}$;', $password)
2、preg_match(';^[a-z][a-z0-9_]{2,7}$;i', $password)

厳密にいうと、1の方が処理が速い。
phpじゃ厳密な速度要求されることは無く、見易さを優先して記述する。
どっちを基準に置いて記述するかの違いです。

正規表現記述は、バージョンではなく、使う正規表現エンジンによって違う。
preg_~は、pcreエンジンの正規表現で記述するということ。
他の正規表現エンジンもpcreの正規表現と基本的に合わせてあるため、同じような記述になる。
phpでもpreg系以外の正規表現関数を使えば、記述が異なるものもあるかも知れない。

プロフィール画像

カテゴリマスター

tezcelloさん

2018/7/2219:19:44

> [a-z0-9]_{2,7} アルファベットか数字 3文字から8文字以内
この部分だけだと、2文字以上7文字以内です。
__[a-z0-9_]{2,7} のミスタイプですね


1)
a-zA-Z0-9 とa-z0-9 の違いは、アルファベットの大文字を含むか否か。
それを、修飾子 i で a-z は大文字も含むようにしているので、差異が無くなります。


2)
^ や $ については、公式マニュアルにありますので、そちらを参照する方が(伝聞にはならないので)良いかと。
http://php.net/manual/ja/regexp.reference.anchors.php


因みに、学習用のスクリプトなのでこの様に弱いパスワードになっているのだと思いますが、そうでなければ非常に危険です。
__英数とアンダーバーで8文字未満なんて...
少なくても上限は 255文字くらいは必要でしょう。
下限は、状況にも依るだろうけど、8とか、10とか、12とか...

参考までに安全なパスワードについて
https://twitter.com/HiromitsuTakagi/status/978648962449129473

このカテゴリの投票受付中の質問

一覧を見る

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる