2010-11-06 10 views
6

Estoy tratando de implementar la siguiente función. ¿Sería mejor utilizar algún tipo de expresión regular aquí? Necesito capturar el número también.Compruebe si una cadena termina con un número en PHP

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

    // Logic 

    return $endsWithNumber; 
} 
+0

Dado que solo tiene un carácter, es mejor que no se moleste en utilizar expresiones regulares. – DaiYoukai

Respuesta

7
$test="abc123"; 
//$test="abc123n"; 
$r = preg_match_all("/.*?(\d+)$/", $test, $matches); 
//echo $r; 
//print_r($matches); 
if($r>0) { 
    echo $matches[count($matches)-1][0]; 
} 

la expresión regular se explica de la siguiente manera:.

*? - Esto ocupará todos los caracteres de la secuencia desde el inicio hasta que también se encuentre una coincidencia para la parte siguiente.

(\ d +) $ - este es uno o más dígitos hasta el final de la cadena, agrupados.

sin? en la primera parte, sólo el último dígito será igualado en la segunda parte porque todos los dígitos antes de que se examinarían por el. *

19

return is_numeric(substr($string, -1, 1));

Esto sólo comprueba si el último carácter de la cadena es numérico, si se desea capturar y devolver números de varios dígitos, puede que tenga que utilizar una expresión regular.

Una expresión regular adecuada sería /[0-9]+$/ que tomará una cadena numérica si está al final de una línea.

+0

Para la expresión regular, puede reemplazar [0-9] con \ d –

+1

Y para el primer carácter, puede simplemente cambiarlo para devolver 'is_numeric (substr ($ string, 0, 1));' – DaiYoukai

+0

+1 para recomendar una alternativa para usar una expresión regular – Maurice

1

en mi opinión La forma más sencilla de encontrar una cadena termina con número es

$length=strlen("string1")-1; 
if(is_numeric($string[$length])) 
{ 
    echo "String Ends with Number"; 
} 
Cuestiones relacionadas