2011-06-07 13 views
12

Estaba tratando de encontrar un método rápido y fácil para verificar si la primera letra de una cadena es un número. Muchas de las funciones y métodos que he visto en S.O parecen demasiado complicados. Me pregunto, habría algo así como este trabajo:La primera letra es el número en la cadena

is_numeric($string[0]); 
+6

Podrías probarlo solo tú sabes ... –

+0

TIAS, ¿qué hace? –

+0

debería funcionar. –

Respuesta

16

Una forma más sencilla podría ser:

is_numeric(substr($string, 0, 1)) 

Soluciona el problema de una posible cadena vacía (que no tiene primer carácter) utilizando substr(). substr() devuelve false en el caso de una cadena vacía, y false no se reconoce como un número por is_numeric().

3

sí, es una forma limpia de hacerlo, pero el uso de ctype_digit lugar, ya que sólo permite que los números del 0 al 9 y nada más.

5

No, eso no funcionaría. Puede obtener "Aviso: desplazamiento de cadena sin inicializar: 0" aviso. Para que funcione, añadir strlen():

if (strlen($string) > 0 && is_numeric($string[0])) { 
} 
+1

+1 'strlen' test –

1

No va a trabajar en cadenas vacías, por lo que debe comprobar el desplazamiento previo para acceder a él:

$result = isset($string[0]) ? is_numeric($string[0]) : false; 
+0

No, no, ¿por qué debería? Para eso se usa isset(). Solo cuando '$ string [0]' esté configurado, se accederá a él, lo cual no es el caso para la cadena vacía. – hakre

6

no sé por qué se elimina esa respuesta, pero la respuesta correcta es

preg_match('/^\d/', $string); 

¿Por qué? Porque proporciona una forma estándar para consultar cadenas. Normalmente, debe responder muchas preguntas similares en su aplicación:

  • ¿comienza una cadena con un dígito?
  • ¿contiene solo dígitos?
  • ¿termina con una carta?
  • ¿contiene una subcadena específica?

etc., etc. Sin expresiones regulares, tendría que inventar una combinación diferente de funciones de cadena para cada caso, mientras que las RE proporcionan la interfaz uniforme y estándar, que simplemente reutiliza una y otra vez. Esto es como el álgebra en comparación con la aritmética.

+2

OP dice "Muchas de las funciones y métodos que he visto en S.O parecen demasiado complicados", ¿no es este uno de esos "demasiado complicados"? – mr5

+0

No usas logarifm para dividir manzanas entre dos niños, ¿verdad? Cuando codifica, la simplier - es mejor, la más corta - es mejor y cuanto más rápido es mejor. Sin embargo, las RE no son simples, rápidas y cortas para el uso. –

Cuestiones relacionadas