Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memeriksa dengan Amanah sama ada Pembolehubah Mewakili Integer dalam PHP?

Bagaimana untuk Memeriksa dengan Amanah sama ada Pembolehubah Mewakili Integer dalam PHP?

Susan Sarandon
Susan Sarandonasal
2024-10-19 13:32:01739semak imbas

How to Reliably Check if a Variable Represents an Integer in PHP?

Menyemak sama ada Pembolehubah ialah Integer dalam PHP

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.

Mengapa is_int() Mungkin Tidak Berfungsi Seperti Yang Dijangka

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.

Kaedah Pengesahan Alternatif

Untuk menyemak dengan pasti sama ada pembolehubah ialah integer, pertimbangkan untuk menggunakan kaedah alternatif yang memberikan hasil yang lebih tepat:

1. Cara FILTER_VALIDATE_INT

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 ✔

2. Cara Perbandingan Casting

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 ✔

3. Cara CTYPE_DIGIT

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 ✔

4. Cara REGEX

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn