2010-02-09 18 views
11

Tiene problemas con esto.Determine si un carácter es alfabético

Digamos que tengo un parámetro compuesto por un solo carácter y solo quiero aceptar caracteres alfabéticos. ¿Cómo determinaré que el parámetro pasado es un miembro del alfabeto latino (a - z)?

Por cierto Im usando PHP Kohana 3.

Gracias.

+0

Por favor, aclare la pregunta: ¿qué es * alfabetos *? ¿Tal vez te refieres a un personaje alfabético? ¿O un personaje alfanumérico? – wallyk

+0

Oh, vale, me gustaría ser corregido. Alfabético debería ser el término correcto. Gracias. –

Respuesta

12

Utilice la siguiente cláusula de guardia en la parte superior de su método:

if (!preg_match("/^[a-z]$/", $param)) { 
    // throw an Exception... 
} 

Si desea permitir que las letras mayúsculas también, cambiar la expresión regular en consecuencia:

if (!preg_match("/^[a-zA-Z]$/", $param)) { 
    // throw an Exception... 
} 

Otra forma de apoyar caso insensibilidad es utilizar el /i caso insensibilidad modificador:

if (!preg_match("/^[a-z]$/i", $param)) { 
    // throw an Exception... 
} 
+0

preg_match ("/^[a-z] $/i", $ param) o insensible a mayúsculas/minúsculas – Xorlev

+0

Sus comentarios están al revés. Si preg_match logra hacer coincidir [a-z], entonces no debe lanzar una excepción. if (! preg_match (...)) {excepción! } –

+0

@Nick Presta: Buena captura. Agregué un '!' A las condiciones. Gracias :) – Asaph

0

Usted puede tratar de:

preg_match('/^[a-zA-Z]$/',$input_char); 

El valor de retorno de la función anterior es cierto si los $ INPUT_CHAR contiene un solo alfabeto, de lo contrario es falso. Puede utilizar adecuadamente el valor de retorno.

2
preg_match('/^[a-zA-Z]$/', $var_vhar); 

método devolverá el valor int que si ningún partido devuelve 0 y para los partidos devuelve 1.

+1

Regex están bien, pero muchas veces usa uno, aunque sea trivial, reinventa la rueda e introduce la superficie de contacto para detectar errores. Preferiría php.net/manual/en/book.ctype.php –

+0

[AZ is passé.] (Http://stackoverflow.com/questions/4955086/sort-upper-case-just-before-lowercase-key -values-from-a-hash/4958634 # 4958634) – tchrist

18

http://php.net/manual/en/function.ctype-alpha.php

<?php 
    $ch = 'a'; 
    if (ctype_alpha($ch)) { 
     // Accept 
    } else { 
     // Reject 
    } 

Esto también toma en cuenta la configuración regional si se establece correctamente.

EDITAR: Para completar, otros carteles aquí parecen pensar que debe asegurarse de que el parámetro sea de un solo carácter, o el parámetro no es válido. Para verificar la longitud de una cadena, puede usar strlen(). Si strlen() devuelve un número que no sea 1, entonces puede rechazar el parámetro también.

Tal como está, su pregunta al momento de responder, transmite que tiene un parámetro de carácter único en alguna parte y desea verificar que sea alfabético. He proporcionado una solución de propósito general que hace esto, y también es amigable con la configuración regional.

+0

Pero, ¿y si '$ ch' tiene más de un carácter? – Asaph

+1

Del manual: _Comprueba si todos los caracteres en la cadena proporcionada, texto, son alfabéticos_ctype_alpha() acepta una cadena. –

+0

Sé lo que hace 'ctype_alpha()'. El OP quiere rechazar todas las entradas que tienen más de un carácter y su solución no lo hace. – Asaph

0

Usaría ctype, como sugirió Nick, ya que no solo es más rápido que la expresión regular, es incluso más rápido que la mayoría de las funciones de cadena integradas en PHP. Pero también hay que asegurarse de que es un solo carácter:

if (ctype_alpha($ch) && strlen($ch) == 1) { 
    // Accept 
} else { 
    // Reject 
} 
+0

No, no es así. ctype_alpha comprueba toda la cadena. Ver el manual. –

+1

Sé que sí. Pero él solo quiere que el parámetro sea un solo personaje. Entonces, si la cadena es 'AB ', debería ser rechazada, independientemente de si ambas están marcadas con' ctype_alpha'. Ver la pregunta. – Anthony

+0

Quizás _you_ debería ver la pregunta. El OP declara que * ya * tiene un solo parámetro de carácter. Él quiere verificar si ese parámetro es alfabético. Verificar la longitud del parámetro es responsabilidad de la persona que llama, o al menos no debe tratarse aquí ya que el OP nunca solicitó esto, y no tiene nada que ver con la pregunta "Determinando si un carácter es alfabético". –

1

No se puede utilizar [a-zA-Z] para Unicode.

aquí el ejemplo de trabajo con Unicode,

if (preg_match('/^\p{L}+$/u', 'my text')) { 
    echo 'match'; 
} else { 
    echo 'not match'; 
} 
0

Esto ayudará con suerte.Esta es una función simple en php llamada ctype_alpha

$mystring = 'a' 
if (ctype_alpha($mystring)) 
{ 
    //Then do the code here. 
} 
+1

Solo para referencia futura; ya hubo dos respuestas aquí que dieron información sobre el uso de 'ctype_alpha', cada una publicada hace más de 4 años. Estas respuestas también incluyeron más explicaciones e integraron la muestra en lo que estaba haciendo el código del OP. En general, solo debe agregar una respuesta a una pregunta muy antigua como esta si tiene algo sustancial para agregar. –

Cuestiones relacionadas