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

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

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

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

Q&A

解決済

4回答

558閲覧

変数の値をチェックして正の整数をのみをtrueとしたいです。

Mason

総合スコア14

PHP

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

0グッド

0クリップ

投稿2021/10/25 16:43

前提・実現したいこと

現在PHPで問題を解いています。
初歩的な質問ですがよろしくお願いします。
変数の値をチェックして正の整数のみをtrueとし、文字列、マイナス、小数点をfalseとしたいです。

該当のソースコード

<?php function inputCheck(int $date) { if(preg_match('/^[1-9][0-9]{0,3}$/', $date)){ echo "true"; } else { echo "false"; } } echo inputCheck(9); echo inputCheck("56"); echo inputCheck(-87); echo inputCheck(5.64643);

試したこと

preg_matchで正規表現によるチェックや、is_intなどでも試してみましたが全ての条件を満たす方法がわかりません。
ご教授して頂けたら幸いです。

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

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

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

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

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

guest

回答4

0

ベストアンサー

function inputCheck(int $date)

このように関数の仮引数に対して型が宣言されている場合、PHPは(デフォルトでは)可能であれば実引数をその型に従うように変換します。ですから

PHP

1inputCheck("56");

では、$dateは文字列 "56" ではなく整数 56 になってしまいますし、

PHP

1inputCheck(5.64643);

では$dateは整数 5 になってしまいます。

ですから、まず関数定義の仮引数に型は宣言せず

PHP

1function inputCheck($date)

として型変換が起こらないようにしておき、正の整数であるかどうかの評価は

PHP

1is_int($date) && $date > 0

とします。

投稿2021/10/25 17:27

編集2021/10/25 17:29
itagagaki

総合スコア8402

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

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

Mason

2021/10/26 15:59

「文字列 "56" ではなく整数 56になる」の部分で ハッとさせたれました!そうですよね。 ありがとうございました!
guest

0

if(is_int($data) && $data >= 0){

投稿2021/10/25 16:54

編集2021/10/25 16:57
175

総合スコア147

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

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

0

すでに回答がありますが

php

1is_int($value) && $value >= 0

で判定できると思います。

php

1$int = 0; 2$int1 = 1; 3$string = '0'; 4$minus = -1; 5$decimal = 0.1; 6$decimal1 = 1.1; 7 8$check = fn ($value) => is_int($value) && $value >= 0; 9 10var_dump( 11 $check($int), // true 12 $check($int1), // true 13 $check($string), // false 14 $check($minus), // false 15 $check($decimal), // false 16 $check($decimal1) // false 17);

気になったのが, inputCheck() の第一引数にタイプヒントが定義されているので '1' などは1とみなされて判定されてしまうと思います。

いただいたコードを修正する場合は以下になります。
(※細かくて恐縮ですがいただいたコードの場合, $date ではなく $data なのではと思いました。)

php

1function inputCheck($data) 2{ 3 echo is_int($data) && $data >= 0 ? 'true' : 'false'; 4} 5echo inputCheck(9); 6echo inputCheck("56"); 7echo inputCheck(-87); 8echo inputCheck(5.64643);

投稿2021/10/26 06:24

m1y474

総合スコア23

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

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

0

数値を正規表現で評価する時点でPHPは自動で適当にキャストし
文字列として認識するため
数値を正規表現で数値か文字列か判断することはできません

投稿2021/10/26 00:19

yambejp

総合スコア115012

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問