2010-12-13 79 views
15

No se pudo encontrar una función para esto. Supongo que necesito usar Regex?Cómo detectar si la cadena contiene 1 letra mayúscula en PHP

Estoy tratando de hacer redireccionamientos html en php en los casos en que la url contiene al menos 1 letra mayúscula.

ejemplo: http://www.domain.com/Michael_Jordan debe ser redireccionado a http://www.domain.com/michael_jordan - el único problema es que parece que no puedo encontrar una secuencia de comandos para detectar si existe al menos 1 letra en mayúscula.

+0

@Bob: no veo el punto de hacer lo mismo que su ejemplo dado que el nombre DNS no distingue entre mayúsculas y minúsculas. – RageZ

+0

Es algo que se me pidió que hiciera para mejorar la estructura del sitio de la url de seo - las URL pasadas tenían letras mayúsculas - así que estamos tratando de preservar la fortaleza de la página de esas urls mientras hacemos la transición a las nuevas. –

+0

@Bob: Veo, eso lo explica – RageZ

Respuesta

26

Algunos expresión regular debe ser capaz de la obra, se puede utilizar preg_match y [A-Z]

if(preg_match('/[A-Z]/', $domain)){ 
// There is one upper 
} 
+1

"Hay ** al menos ** uno superior – zerkms

+0

@zerkms perdí tu punto la falta' + ' – RageZ

+4

El' + 'es completamente innecesario. – eyelidlessness

27
if (strtolower($url) != $url){ 
    //etc... 
+0

de hecho es simple, pero ¿no es una sobreutilización de strtolower? – zerkms

+1

¿A diferencia de qué?Reinventar la rueda para cosas simples como esta es simplemente tonto. –

+0

A diferencia de regex, que es, en mi humilde opinión, una forma más semántica de resolver este problema (porque la expresión regular en sí misma describe lo que hacemos). – zerkms

4

También puede probar este

if (!ctype_lower($string)) { 
    // there is at least une uppercase character 
} 

no está seguro de si esto es más eficiente que los otros dos métodos propuestos.

+0

He sentido que esta es la respuesta más directa, ya que es una función que ya existe en PHP. – Anther

+2

Esto funcionará en cadenas que contienen caracteres alfabéticos * solamente *. Por ejemplo, no funcionará en las cadenas ' quick' o 'noupper1'. – FixMaker

1
preg_match_all('%\p{Lu}%usD', 'aA,éÁ,eE,éÉ,iI,íÍ,oO,óÓ,öÖ,őŐ,uU,úÚ,üÜ,űŰ', $m); 
echo '<pre>'; 
var_dump($m); 
echo '</pre>'; 

Probado con caracteres húngaros utf-8, [A-Z] es solo para latin1.

0

Aquí está un ejemplo sencillo:

$mydir = "C:\Users\John" ; 

print preg_match('/^[A-Z]:\.*/', $mydir, $match)."\n" ; 
print $match[0]. " preg match \n" ; 

Produce:

1 
C: preg match 

Esto sugiere que los parens no son necesarios --para una coincidencia, al menos

Mira esto ser más específico para su aplicación: PHP to SEARCH the Upper+Lower Case mixed Words in the strings?

Cuestiones relacionadas