- 締切済み
php正規表現 数字又は空欄 始まりと終わり
phpの正規表現に関する質問です。 空欄(入力がされていない)か又は数字が含まれていない場合にtrueを返したいのですが以下のコードでよいのでしょうか? !ereg("^[0-9\t]+$", $text) ただ、「\t」を使用すると、空欄は空欄でも「入力されていない」という意味ではなく、「半角スペースを挿入」という意味になってしまうように思いますが... また、始まりと終わりに「^」「$」を使用しなければ何が違うのでしょうか?「^」が「~で始まる。」で「$」が「~で終わる。」という正規表現だということは分かりますが、「"^[0-9]+$"」と「"[0-9]+"」はどちらにしても同じ意味に思えます。どこが違うのでしょう? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Suzi
- ベストアンサー率38% (130/334)
"^[0-9]+$" は、最初から最後まで数字が連続しているという意味で、aa1201356bb にはマッチしませんが、"[0-9]+" だと、数字が連続しているという意味で、aa1201356bbはマッチしてしまうと思います。 変数$hogeに空欄か数字が含まれていない場合をtrueなら、&&を使うのはどうでしょうか。 if(empty($hoge) or ereg('\d', $hoge) == '0') ・・・ \t はタブではないでしょうか。
- hrm_mmm
- ベストアンサー率63% (292/459)
「\t」はタブ文字です、空文字列でも半角スペースでもありません。 スペース、タブ、改行文字のいずれかを指定するなら「\s」です。 「"^[0-9]+$"」は数字で始まり数字のみが続いて数字のみで終わる時に一致しますが、 「"[0-9]+"」はどんな文字で始まってもよく、途中に数字が一文字以上あれば一致します。
補足
hrm_mmmさん ご回答ありがとうございました。 >スペース、タブ、改行文字のいずれかを指定するなら「\s」です。 上記は理解しましたが、\sには空欄(入力が全く何もされていない状態)も含まれるのでしょうか? 少し私の質問に分からずらい点がありましたので改めてご質問します。 空欄(入力が全く何もされていない状態)のみか又は数字の”どちらか一方”(つまり数字の間に空欄を含むものもはだめ 例:223 12)が含まれていない場合にtrueを返したいのですが以下のコードでよいのでしょうか?間違っている場合は、コードを教えて下さい。 !ereg^([0-9]+|\s)$", $text) お分かりの方、おられましたらお願いします。
補足
Suziさん ご回答ありがとうございました。 参考にさせて頂きます。