質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

4回答

3734閲覧

未入力の正規について

karyamo

総合スコア4

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2020/03/09 15:46

編集2020/03/09 15:47

正規表現で
aiueo
popopo
hoge
のいずれかにマッチするのは

/\A(aiueo|popopo|hoge)\z/

でできていますがこれに加えて、未入力の際も通したいです。

###試したこと

/\A(|aiueo|popopo|hoge)\z/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/03/09 22:28

インプットとして使われる文字列をいくつか例示した上で、ご自身が組んだPHPのコードをご提示ください。
退会済みユーザー

退会済みユーザー

2020/03/10 01:25

比較する対象を、どこから持ってくるかによって、正規表現で賄う外側での対策も必要になるよ。$_GETや$_POSTでの未入力だったり、あるいはデータベース上でNULLのものだったり。そこまで言及してほしいです。
Y.H.

2020/03/10 02:00

> 試したこと に記載されている正規表現では何がどうダメだなのでしょうか? 具体的に記載したほうがいいですよ。
guest

回答4

0

未入力

ユーザーからの任意の入力をチェックするなら
filter_inputでis_nullチェックしてください
filter_inputは正規表現でのチェックも可能です

投稿2020/03/10 00:13

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/03/10 02:32

一応サンプル <?PHP $hoge=filter_input(INPUT_GET,"hoge",FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/\A(|aiueo|popopo|hoge)\z/"]]); if(!is_null($hoge)){ var_dump($hoge); } ?> <form method="get"> <select name="hoge"> <option value="">empty</option> <option value="aiueo">aiueo</option> <option value="popopo">popopo</option> <option value="hoge">hoge</option> <option value="other">other</option> </select> <input type="submit" value="send"> </form> データが送られてこない場合はnull 想定外のデータが送られてきた場合はfalseを返します
guest

0

根本からひっくり返すようで恐縮ですが、正規表現である必要がありますか?
empty($str) とか、 !strlen($str) とか、 $str === '' で比較したほうが、意図がわかりやすくて良いと思います。正規表現は他の人がコードを見たときや、自分自身であっても後になって見たときに、何にマッチさせようとしているのかを読み取るのが大変というデメリットがあります。

次のコードは正規表現 (preg_match()) で比較した例と文字列一致 (in_array()) で比較した例です。どちらも文字列とだけ比較する限りは、結果は同じです。
文字列以外 (false, null) が渡される可能性がある場合は、 preg_match() では意図せずtrueになってしまう可能性があるので、別途 is_string() 等で弾くような処理が必要です

php

1<?php 2 3define('ALLOWED_PATTERN', '/\A(|aiueo|popopo|hoge)\z/'); 4 5define('ALLOWED_STRINGS', [ 6 '', 7 'aiueo', 8 'popopo', 9 'hoge' 10]); 11 12foreach(['foo', 'hoge', '', null, false, 0, 42] as $str) { 13 $test_preg_match = preg_match(ALLOWED_PATTERN, $str); 14 $test_in_array = in_array($str, ALLOWED_STRINGS, true); 15 16 echo '-----' . PHP_EOL . 'subject: '; 17 var_dump($str); 18 if($test_preg_match) echo " -> '{$str}' has matched with preg_match." . PHP_EOL; 19 if($test_in_array) echo " -> '{$str}' has matched with in_array." . PHP_EOL; 20} 21 22/* 23----- 24subject: string(3) "foo" 25----- 26subject: string(4) "hoge" 27 -> 'hoge' has matched with preg_match. 28 -> 'hoge' has matched with in_array. 29----- 30subject: string(0) "" 31 -> '' has matched with preg_match. 32 -> '' has matched with in_array. 33----- 34subject: NULL 35 -> '' has matched with preg_match. 36----- 37subject: bool(false) 38 -> '' has matched with preg_match. 39----- 40subject: int(0) 41----- 42subject: int(42) 43*/

投稿2020/03/09 23:50

thyda.eiqau

総合スコア2982

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/03/10 01:39

>正規表現である必要がありますか? 私も同じ疑問持ちました。 煩雑になるだけで拡張性やメンテナンス性の観点から難がありそうです。
退会済みユーザー

退会済みユーザー

2020/03/10 03:25

スクールの課題か何かかなーって目線で見てた
guest

0

未入力というのが、空文字列のことならそれで合ってます。

投稿2020/03/09 15:54

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こういうこと?

/\A(aiueo|popopo|hoge)?\z/

投稿2020/03/09 15:52

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問