[英]php if-statement: 0>2012?
也許是一個非常簡單的問題,但是我不知道我做錯了什么,也許有人可以幫助我?
有一個包含年份的GET變量,我想檢查它是否實際上是有效格式,並且不是過去的格式,即當前年份或以后的年份。 到目前為止,我所做的是:
$current_year=date('Y',$today);
(is_int(intval($_GET['year'])) AND $_GET['year']>$current_year) ? $year=$_GET['year'] : $year=$current_year;
如果GET-var不是整數,例如字符串“ abc”,則intval()函數應按php.net手冊所述返回0或1。
但是,如果$ _GET ['year']包含“ abc”,然后將其轉換為0,並且不應大於2012,則$ year不是2012 !!
任何提示將不勝感激,並提前感謝您!
編輯:
感謝您的所有出色回答! 我已經嘗試過考慮所有這些因素,並且現在對我來說這非常有效:
if (ctype_digit($_GET['year'])) { ($_GET['year'] > $current_year && $_GET['year']<=($current_year+2)) ? $year=$_GET['year'] : $year=$current_year;} else {$year=$current_year;}
由於我只需要未來的2年,因此添加了此內容...謝謝您提示是否僅4位數字,請減少! :)
intval()
不會更改傳遞給它的變量的類型。 因此,您實際要做的是將“ abc”與“ 2012”進行比較,因為date()
返回一個字符串。
intval
會將任何東西都轉換為int
,即使只是變為0
,這意味着is_int
因此始終為true
。 is_int(intval())
因此毫無意義。 $_GET
值將始終是字符串,即使它們僅包含數字。 因此,您可能想使用ctype_digit
進行檢查,它可以告訴您字符串中的所有字符是否都是數字。 因此,您的支票應類似於:
if (ctype_digit($_GET['year']) && $_GET['year'] > $current_year) ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.