Apabila bekerja dengan input pengguna, adalah penting untuk mengesahkan data untuk memastikan integritinya. Satu tugas pengesahan biasa ialah menyemak sama ada pembolehubah mewakili integer. PHP menyediakan fungsi is_int() untuk tujuan ini, tetapi ia mungkin tidak selalu menghasilkan hasil yang diingini.
Menggunakan is_int() boleh mengembalikan positif palsu untuk nilai yang kelihatan sebagai integer tetapi tidak diiktiraf oleh fungsi tersebut. Sebagai contoh, pertimbangkan kes di mana pengguna memasukkan "1" sebagai nombor halaman:
<code class="php">$page = $_GET['p'];</code>
Dalam kes ini, $page akan diberikan rentetan "1," yang akan menghasilkan is_int($page ) returning false.
Untuk menyemak dengan pasti sama ada pembolehubah ialah integer, pertimbangkan untuk menggunakan kaedah alternatif yang memberikan hasil yang lebih tepat:
Penapis FILTER_VALIDATE_INT boleh digunakan untuk mengesahkan input integer:
<code class="php">if (filter_var($page, FILTER_VALIDATE_INT) === false) { // Not an integer }</code>
Output:
TEST -1: -1 (type:integer) Your variable is an integer ✔ TEST 0 : 0 (type:integer) is an integer ✔ TEST 1 : 42 (type:integer) is an integer ✔ TEST 2 : 4.2 (type:double) is not an integer ✘ TEST 3 : 0.42 (type:double) is not an integer ✘ TEST 4 : 42 (type:double) is an integer ✔ TEST 5 : 42 (type:string) is an integer ✔ TEST 6 : a42 (type:string) is not an integer ✘ TEST 7 : 42a (type:string) is not an integer ✘ TEST 8 : 36 (type:integer) is an integer ✔ TEST 9 : 1337 (type:double) is an integer ✔
Membandingkan perwakilan rentetan pembolehubah dengan perwakilan integernya juga boleh mendedahkan sama ada ia adalah integer:
<code class="php">if (strval($page) !== strval(intval($page))) { // Not an integer }</code>
Output:
TEST -1: -1 (type:integer) Your variable is an integer ✔ TEST 0 : 0 (type:integer) is an integer ✔ TEST 1 : 42 (type:integer) is an integer ✔ TEST 2 : 4.2 (type:double) is not an integer ✘ TEST 3 : 0.42 (type:double) is not an integer ✘ TEST 4 : 42 (type:double) is an integer ✔ TEST 5 : 42 (type:string) is an integer ✔ TEST 6 : a42 (type:string) is not an integer ✘ TEST 7 : 42a (type:string) is not an integer ✘ TEST 8 : 36 (type:integer) is an integer ✔ TEST 9 : 1337 (type:double) is an integer ✔
Menggunakan fungsi ctype_digit, anda boleh menyemak nombor positif dan 0:
<code class="php">if (!ctype_digit(strval($page))) { // Not an integer }</code>
Output:
TEST -1: -1 (type:integer) # Your variable is not an integer ✘ TEST 0 : 0 (type:integer) is an integer ✔ TEST 1 : 42 (type:integer) is an integer ✔ TEST 2 : 4.2 (type:double) is not an integer ✘ TEST 3 : 0.42 (type:double) is not an integer ✘ TEST 4 : 42 (type:double) is an integer ✔ TEST 5 : 42 (type:string) is an integer ✔ TEST 6 : a42 (type:string) is not an integer ✘ TEST 7 : 42a (type:string) is not an integer ✘ TEST 8 : 36 (type:integer) is an integer ✔ TEST 9 : 1337 (type:double) is an integer ✔
Ungkapan biasa juga boleh digunakan untuk mengesahkan integer:
<code class="php">if (!preg_match('/^-?\d+$/', $page)) { // Not an integer }</code>
Output:
TEST -1: -1 (type:integer) Your variable is an integer ✔ TEST 0 : 0 (type:integer) is an integer ✔ TEST 1 : 42 (type:integer) is an integer ✔ TEST 2 : 4.2 (type:double) is not an integer ✘ TEST 3 : 0.42 (type:double) is not an integer ✘ TEST 4 : 42 (type:double) is an integer ✔ TEST 5 : 42 (type:string) is an integer ✔ TEST 6 : a42 (type:string) is not an integer ✘ TEST 7 : 42a (type:string) is not an integer ✘ TEST 8 : 36 (type:integer) is an integer ✔ TEST 9 : 1337 (type:double) is an integer ✔
Atas ialah kandungan terperinci Bagaimana untuk Memeriksa dengan Amanah sama ada Pembolehubah Mewakili Integer dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!