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).
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?
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)
//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("... ");
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 ?
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...?
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.