Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man in PHP zuverlässig prüfen, ob eine Variable eine Ganzzahl darstellt?

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

Susan Sarandon
Susan SarandonOriginal
2024-10-19 13:32:01836Durchsuche

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>

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>

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 ✔

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>

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 ✔

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>

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 ✔

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>

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 ✔

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!

Stellungnahme:
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