2010-11-06 3 views
6

Eventuali duplicati:
Check if a String Ends with a Number in PHPVerificare se una stringa inizia con un numero in PHP

Sto cercando di implementare la funzione qui sotto. Sarebbe meglio usare qualche tipo di regex qui? Devo anche catturare il numero.

function startsWithNumber($string) { 
    $startsWithNumber = false; 

    // Logic 

    return $startsWithNumber; 
} 
+2

duplicato esatto del [Controlla se una stringa termina con un numero in PHP] (http://stackoverflow.com/questions/4114609/check-if-a-string-ends-with-a-number-in-php) –

+0

Questa è praticamente la stessa domanda del tuo ultimo: http: //stackoverflow.com/questions/4114609/check-if-a-string-ends-with-a-number-in-php. Non pensavi che la risposta avrebbe risolto anche questo? E no, per favore non usare una regex per controllare un singolo carattere di una stringa. –

+0

Sì, non è necessario iniziare due domande per questo. –

risposta

5

Qualcosa di simile a questo può funzionare per voi:

function str2int($string) { 
    $length = strlen($string); 
    for ($i = 0, $int = ''; $i < $length; $i++) { 
    if (is_numeric($string[$i])) 
     $int .= $string[$i]; 
    else break; 
    } 

    return (int) $int; 
} 
+1

Oppure la semplice riga 1 "preg_match' nell'altra risposta http://stackoverflow.com/a/4114620/1992193 –

+0

Se sei solo cercando il primo carattere, le stringhe possono essere viste come matrici di caratteri. Per accedere al primo carattere è possibile utilizzare rapidamente l'operatore [] alla posizione zero. per esempio. 'Is_numeric ($ string [0])' –

13

È possibile utilizzare substr e ctype_digit:

function startsWithNumber($string) { 
    return strlen($string) > 0 && ctype_digit(substr($string, 0, 1)); 
} 

L'ulteriore strlen è solo necessaria come ctype_digit rendimenti vero per una stringa vuota prima di PHP 5.1.

O, se invece volete usare un'espressione regolare:

function startsWithNumber($str) { 
    return preg_match('/^\d/', $str) === 1; 
} 
+2

Mi piace questo approccio in più .. Molto semplice – user284503