- ベストアンサー
PHPのpreg系正規表現で値の正確性を確認する方法
- PHPのpreg系正規表現を使用して、入力された値が正規表現の書式に適合しているかどうかをチェックする方法を教えてください。
- 「正しい」とは、導き出したい値が正しいかではなく、正規表現の記述方法が正しいかどうかです。例えば、「[]」や「{}」が正しく閉じているかをチェックするだけで良いのでしょうか?
- もしチェック用の関数などがあれば、教えていただけると助かります。お忙しいところ恐れ入りますが、分かる方がいらっしゃいましたらお助けいただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> 正しい [0-9]{1,3} とありますが、これ正しくないですね。 preg系関数に入れるなら /[0-9]{1,3}/ 表記ミスだとは思いますが… if (@preg_match('/[0-9{1,3}/', '') !== false) { echo '合っている'; } else { echo '間違っている'; } 【ポイント】 ・「@」演算子でエラー抑制 ・チェック対象の文字列は空文字列で十分 ・返り値のパターンは「1」「0」「FALSE」の3通りで、今回はFALSEでなければ正しいとする。
その他の回答 (2)
- Picosoft
- ベストアンサー率70% (274/391)
>「[]」と「{}」が正しく閉じているかチェックするだけでいいのかな?? それだと「*aaa」も正常と判断してしまうのでは? まじめにやろうとすると正規表現の構文解析をすることになります。 PHPで作られた自作の正規表現エンジンでも探せば方法はあるかもしれませんが、 正規表現として正しいかを調べたいだけであれば、 おとなしくtry-catchを使う方がよっぽど低コストだと思います。
お礼
そうですね、これも()これも?これも^ 位置の縛りやエスケープで入力されていないとエラーになるものなどがたんまりありました 2番のTo_aru_User様の回答でドンピシャリでした! Picosoft様も回答いただきありがとうございます!
- hanabutako
- ベストアンサー率54% (492/895)
preg_*系の関数に壊れた正規表現を与えたらエラーを出してくれると思いますが。 例えば、こんな感じで。 | Warning: preg_match_all(): No ending matching delimiter ']' found 正規表現で思ったものとマッチするかを調べるには思いつく様々なパターンを書いて、マッチしてほしいものでマッチして、マッチしてほしくないものでマッチしないということを調べるテストを書くのが確実だと思います。 まあ、その手のテストを書いたらテストを動かした時にWarningが出て誤った正規表現を与えたことに気づくと思いますが。
お礼
ごめんなさい僕の聞き方が悪かったんですが、 間違った記述をすればエラーが出るのは、そりゃ存じております。 記述方法が正しいか否か、「情報を表示したい」のではなくて「情報を返したい」です 以下「reg_check」のような動きをする関数の情報、具体的なソースが知りたい if(reg_check('[0-9{1,3}')){ echo '合っている'; }else{ echo '間違っている'; } ちなみにtry~catchステートメントはコストがかかるので使うつもりはありません
お礼
おおおお!すごい、僕が求めていた回答です!ありがとうございます!! 正規表現の解析をしなければいけないのかと半ば諦めておりました 「返り値のパターンは「1」「0」「FALSE」の3通り」これが目から鱗でした マッチしなかったは0、エラーの場合はfalseなんですね!! 「@」演算子は遅いと言われていますが それが嫌なら正規表現の解析を自力でせよ、という感じですね デリミタに関しては絶対に必要なので逆に省略してましたm( _ _ )m