PHP Die erste Zahl in einem String finden

Handymann

** Losedealer **
ID: 418952
L
27 August 2011
346
15
Hallo ,

Ich möchte gern nur die erste Zahl in einem String finden.

z.b "aaaasssddddd4ddds66sasaa"
Ausgabe soll "4" sein.

z.b "xxxdd54443334556"
Ausgabe soll "5" sein.

Also immer die erste Zahl und nur eine Position die im String vorkommt.

Ich weiss das es mit preg_match geht , habe aber damit gar keine Erfahrung.
 
Hm, sowas?

PHP:
$found = preg_match("[\d]", $suchstring,$matches);
if ($found == 1) {
    $firstdigit = $matches[0];
} else {
    // nix gefunden
}
 
Das geht nicht. Hier würden alle Nicht-Buchstaben, wie Leerzeichen oder Satzzeichen auch matchen.
 
um von dem preg_ wegzukommen, eine einfache Lösung.

Code:
$string = 'xxxdd54443334556';
$settype($string, 'integer');
$erg = substr($string, 0,1);
 
Zuletzt bearbeitet:
um von dem preg_ wegzukommen, eine einfache Lösung.
Bei mir kommt da immer 0 raus, weil der String nicht vernünftig in eine Zahl umgewandelt werden kann.

Ich als alter Einzeilerfreund würde es folgendermassen lösen:
PHP:
<?php
$string = 'xxxdd54443334556';
$first_number = reset(array_filter(str_split($string), 'ctype_digit'));
var_dump($first_number);
 
PHP kann das sogar ganz gut umwandeln, ja sogar mit strings rechnen !

Und bei mir kommt 1 raus, warum das bei dir nicht geht find ich schon merkwürdig...

// offtopic
dein "Einzeiler" ist gar kein Einzeiler ;) und wirklich schön lesen kann man das auch nicht. Ich finde ein Code muss schön eingerückt werden - aber das ist wohl Geschmackssache ;)
 
wäre die Funktion strcspn eine Option ?
ggf in verbindung mit Substr.

int strcspn ( string $str1 , string $str2 [, int $start [, int $length ]] )

Gibt die Länge von str1 zurück, bis zu der kein Zeichen aus str2 vorkommt.


also:
PHP:
$erg = substr($test, strcspn ( $test , '1234567890' )+1 , 1) ;
 
Zuletzt bearbeitet:
@tleilax:
dann starte ich halt mal mein apache :) aber ich denke du hast Recht, das settype ist falsch... wie hab ich das nur sonst gemacht ?! *grübl*

*edit* auch nach dem Beispiel auf php.net geht das so... aber da ist der integer am Anfang des Strings

jepp, wenn das erste Zeichen im String eine Zahl ist funktioniert es

folgedes gibt '444' zurück:

PHP:
$string = (int) '444xxxdd54443334556';
var_dump($string);
und das hier gibt '0' zurück:
PHP:
$string = (int) 'xxxdd54443334556';
var_dump($string);



die Lösung von tleilax funktioniert aber ganz gut :)
 
Zuletzt bearbeitet: