---
title: "sträng -> int : Skillnad på \"sju\" och \"0\""
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/108715-sträng-int-skillnad-på-sju-och-0"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "aasah"
published: "2004-08-07T11:12:53.000Z"
updated: "2004-08-08T11:19:39.000Z"
replies: 14
views: 378
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/108715-sträng-int-skillnad-på-sju-och-0"
---

# sträng -> int : Skillnad på "sju" och "0"

## #1 — aasah, 2004-08-07T11:12Z

Jag har något som *borde* vara ett heltal i en strängvariabel $str. Detta tal ska lagras i MySQL. Alltså ska jag göra om $str's värde till heltal. Om den nu faktiskt innehåller ett heltal är allt frid och fröjd... Men jag vill fånga upp felet om värdet inte är ett heltal. HUR? :q

(int)"1" ==\> 1 OK
(int)"0" ==\> 0 OK 
Men (int)"sju" ==\> 0 också!

is_int funkar inte, för is_int($str) är alltid falskt (naturligtvis).

Tacksam för hjälp för jag har kört fast!

Permalänk: https://www.webforum.nu/p/108715

## #2 — UlfT, 2004-08-07T11:26Z

Borde verkligen php förstå svenska namn på siffror? Om inte, så borde väl detta kunna lösas med en översättningstabell. Men varför ska siffrorna matas in med siffernamnen?

Permalänk: https://www.webforum.nu/p/1403402

## #3 — Matte, 2004-08-07T12:11Z

Ta en titt på [is_numeric](http://se2.php.net/manual/en/function.is-numeric.php)

Permalänk: https://www.webforum.nu/p/1403417

## #4 — aasah, 2004-08-07T12:20Z

UlfT - Missförstånd! Fullkomligt missförstånd! 

Nej, det SKA inte matas in text, den SKA inte förstå annat än heltal. Det är det som är problemet... 

$str får sitt värde från en fil. Om man i denna fil råkar skriva *1#* istället för *13* tex eller någon (sent en kväll ?) får för sig att skriva *7 p* istället för *7* eller vad som helst som inte kan evalueras som heltal... *3,14*, *sju*, *&¤(#/Q*.... så vill jag få ett felmeddelande och inte en snällt konverterad sträng till siffran 0. För 0 kan mycket väl vara en korrekt nolla, det signalerar inget fel till mig... 

För ögonblicket "löser" jag det på detta utomordentligt fula vis: ($str heter eg $keep, bytte namn här för att det skulle bli lättare... :r)

```php
              //knas för att skilja "0" från "sju"
               //(int)"sju" ==> 0 nämligen
               $tmp = $keep;
               $keep = (int)($keep);
               if ($keep == 0 && $tmp != "0")
                  printParseError("... ");
```

Permalänk: https://www.webforum.nu/p/1403421

## #5 — aasah, 2004-08-07T12:32Z

Hmmm, har just insett att min nöd-"lösning" inte heller funkar så vidare bra... 

> **Matte skrev:**
>
> Ta en titt på [is_numeric](http://se2.php.net/manual/en/function.is-numeric.php)

Den gör inte riktigt det jag vill. För visst blir: is_numeric("3.14") TRUE... ?

Finns det något annat sätt att försäkra sig om att det är ett heltal än via reguljära uttryck.... ? :q

Permalänk: https://www.webforum.nu/p/1403423

## #6 — Phorpher, 2004-08-07T12:34Z

```php
is_int()
```

 ??

Permalänk: https://www.webforum.nu/p/1403424

## #7 — aasah, 2004-08-07T12:38Z

is_int() funkar inte.

```php
$str = "sju";
echo "sju is int? ".is_int($str);
echo "<br>'7' is int? ".is_int("7");
echo "<br>7 is int? ".is_int(7);
```

Skriver ut

> sju is int? 
> '7' is int? 
> 7 is int? 1

Dvs "sju" är ingen int - tack för det! ;)
"7" är ingen int
7 är en int

Så nej, det funkar inte.

Permalänk: https://www.webforum.nu/p/1403427

## #8 — Phorpher, 2004-08-07T12:54Z

Kolla på en usercomment för is_int() så borde det lösa sig..

Permalänk: https://www.webforum.nu/p/1403437

## #9 — Matte, 2004-08-07T13:02Z

> **aasah skrev:**
>
> Finns det något annat sätt att försäkra sig om att det är ett heltal än via reguljära uttryck.... ? :q

Varför inte använda ett regexp ? Speciella skäl ?

```php
if (!preg_match("/\\D/", $str)) {
   echo "Är ett heltal";
}
```

Permalänk: https://www.webforum.nu/p/1403444

## #10 — aasah, 2004-08-07T13:38Z

> **Matte skrev:**
>
> > **aasah skrev:**
> >
> > Finns det något annat sätt att försäkra sig om att det är ett heltal än via reguljära uttryck.... ? :q
>
> 
> 
> Varför inte använda ett regexp ? Speciella skäl ?
>
>
> ```php
> if (!preg_match("/\\D/", $str)) {
>    echo "Är ett heltal";
> }
> ```

För att jag inte fick det att funka... med mitt tidigare försök.

Ditt förslag tar väl bara talen 0 - 9 ? Måste man inte skriva:
'/\\\\d+/' ???

Vänta ett tag... behöver man inte två \\ ? Det står så här i ditt inskrivna förslag, men det syns bara ett? Men till PHP i programmet ska det väl vara två? En som talar om för RE att det är ett speciellt 'd', och en i php-strängen som säger att "ge 17 i att käka upp \\:t före d" i princip...?

Permalänk: https://www.webforum.nu/p/1403464

## #11 — Peeer, 2004-08-07T13:55Z

Kopierar man mattes kod rakt av (den versionen som syns i själva tråden) så fungerar det med alla positiva heltal. Anledningen till att han har 2 \\ i koden (som man ser om man citerar inlägget) är att wF (dvs. vBulletin) av någon konstig anledning escapear bort det annars.

Permalänk: https://www.webforum.nu/p/1403488

## #12 — aasah, 2004-08-07T14:04Z

Tusen tack för all hjälp med att reda ut detta! :D

Jag får tränga djupare in i de regexp PHP svänger sig med tror jag. :)

Permalänk: https://www.webforum.nu/p/1403493

## #13 — aasah, 2004-08-08T10:41Z

> **aasah skrev:**
>
> > **Matte skrev:**
> >
> > Varför inte använda ett regexp ? Speciella skäl ?
> >
> >
> > ```php
> > if (!preg_match("/\\D/", $str)) {
> >    echo "Är ett heltal";
> > }
> > ```
>
> ... Ditt förslag tar väl bara talen 0 - 9 ? Måste man inte skriva:
> '/\\\\d+/' ???...

Min PHP-version känner i vart fall inte igen \\D visade det sig idag när den här raden äntligen kördes... Men följande funkar:

```php
preg_match("/\\d+/", $str)
```

Rimligtvis gäller det inte för negativa tal, men i mitt fall behövs det inte heller.

Permalänk: https://www.webforum.nu/p/1403825

## #14 — Matte, 2004-08-08T11:04Z

Ska du få det att funka får du skriva:

```php
preg_match("/^\\d+$/", $str)
```

Som du hade skrivit det skulle det blivit en matchning så länge strängen innehöll minst en siffra, men kunde innehålla hur många bokstäver som helst.

```php
!preg_match("/\\D/", $str)

// Är samma sak som
!preg_match("/[^\\d]/", $str)
```

Vi söker alltså efter ett tecken som INTE är siffra i detta fall, och hittar vi ingen blir resultatet true.

Permalänk: https://www.webforum.nu/p/1403833

## #15 — aasah, 2004-08-08T11:19Z

Tack för påpekandet! :)

Men... konstigt! 

```php
preg_match("/\\D/", $str)
```

Fungerar inte, det leder till fel på: 1   
medan

```php
!preg_match("/[^\\d]/", $str)
```

funkar....

Permalänk: https://www.webforum.nu/p/1403838

---

Tråden på webben: https://www.webforum.nu/amne/php/108715-sträng-int-skillnad-på-sju-och-0
