Wie kann man in PHP zuverlässig prüfen, ob eine Variable eine Ganzzahl darstellt?

Susan Sarandon
Freigeben: 2024-10-19 13:32:01
Original
739 Leute haben es durchsucht

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

Überprüfen, ob eine Variable in PHP eine Ganzzahl ist

Bei der Arbeit mit Benutzereingaben ist es wichtig, die Daten zu validieren, um ihre Integrität sicherzustellen. Eine häufige Validierungsaufgabe besteht darin, zu prüfen, ob eine Variable eine Ganzzahl darstellt. Zu diesem Zweck stellt PHP die Funktion is_int() bereit, die jedoch möglicherweise nicht immer die gewünschten Ergebnisse liefert.

Warum is_int() möglicherweise nicht wie erwartet funktioniert

Die Verwendung von is_int() kann zu Fehlalarmen führen für Werte, die als Ganzzahlen erscheinen, von der Funktion aber nicht als solche erkannt werden. Stellen Sie sich zum Beispiel den Fall vor, dass ein Benutzer „1“ als Seitenzahl eingibt:

<code class="php">$page = $_GET['p'];</code>
Nach dem Login kopieren

In diesem Fall wird $page die Zeichenfolge „1“ zugewiesen, was zu is_int($page führt ) gibt false zurück.

Alternative Validierungsmethoden

Um zuverlässig zu überprüfen, ob eine Variable eine Ganzzahl ist, sollten Sie alternative Methoden verwenden, die genauere Ergebnisse liefern:

1. FILTER_VALIDATE_INT Weg

Der FILTER_VALIDATE_INT-Filter kann verwendet werden, um ganzzahlige Eingaben zu validieren:

<code class="php">if (filter_var($page, FILTER_VALIDATE_INT) === false) {
    // Not an integer
}</code>
Nach dem Login kopieren

Ausgabe:

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 ✔
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

2. Casting-Vergleichsmethode

Der Vergleich der Zeichenfolgendarstellung einer Variablen mit ihrer Ganzzahldarstellung kann auch zeigen, ob es sich um eine Ganzzahl handelt:

<code class="php">if (strval($page) !== strval(intval($page))) {
    // Not an integer
}</code>
Nach dem Login kopieren

Ausgabe:

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 ✔
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

3. CTYPE_DIGIT Way

Mit der Funktion ctype_digit können Sie nach positiven Zahlen und 0 suchen:

<code class="php">if (!ctype_digit(strval($page))) {
    // Not an integer
}</code>
Nach dem Login kopieren

Ausgabe:

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 ✔
Nach dem Login kopieren

4. REGEX Way

Reguläre Ausdrücke können auch zur Validierung von Ganzzahlen verwendet werden:

<code class="php">if (!preg_match('/^-?\d+$/', $page)) {
    // Not an integer
}</code>
Nach dem Login kopieren

Ausgabe:

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 ✔
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann man in PHP zuverlässig prüfen, ob eine Variable eine Ganzzahl darstellt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!