2010-12-13 11 views
15

Impossible de trouver une fonction pour cela. Je suppose que j'ai besoin d'utiliser regex?Comment détecter si une chaîne contient 1 lettre majuscule dans PHP

J'essaie de faire des redirections html en PHP dans les cas où l'URL contient au moins une lettre majuscule.

exemple: http://www.domain.com/Michael_Jordan doit être redirigé vers http://www.domain.com/michael_jordan - seul problème est que je n'arrive pas à trouver un script pour détecter si au moins 1 lettre majuscule existe.

+0

@Bob: Je ne vois pas l'intérêt de faire comme votre exemple depuis que le nom DNS est insensible à la casse. – RageZ

+0

C'est quelque chose que l'on m'a demandé de faire pour améliorer la structure du site url - les anciennes URL avaient des majuscules - donc nous essayons de préserver la force de ces URLs lors de la transition vers les nouvelles. –

+0

@Bob: Je vois, ça l'explique – RageZ

Répondre

26

une expression régulière devrait pouvoir le travail, vous pouvez utiliser preg_match et [A-Z]

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

"Il y a ** au moins ** supérieur – zerkms

+0

@zerkms Désolé, vous avez manqué votre point le' '' manquant – RageZ

+4

Le '+ 'est entièrement inutile. – eyelidlessness

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

en effet c'est simple, mais n'est-ce pas un excès de strtolower? – zerkms

+1

Par opposition à quoi?Réinventer la roue pour des trucs simples comme celui-ci est juste idiot. –

+0

Par opposition à regex, qui est, à mon humble avis, un moyen plus sémantique pour résoudre ce problème (parce que l'expression régulière elle-même décrit ce que nous faisons). – zerkms

4

Vous pouvez également essayer

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

ne sais pas si cela est plus efficace que les deux autres méthodes proposées.

+0

J'ai l'impression que c'est la réponse la plus directe, en étant une fonction qui existe déjà en PHP – Anther

+2

Cela fonctionnera sur les chaînes qui contiennent des caractères alphabétiques * seulement * .Par exemple, cela ne fonctionnera pas sur les chaînes 'le quick' ou 'noupper1'. – FixMaker

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

Testé avec des caractères hongrois utf-8, [A-Z] est uniquement pour latin1.

0

est ici un simple exemple:

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

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

Produit:

1 
C: preg match 

Cela donne à penser que les parens ne sont pas nécessaires --pour un match, au moins

Regardez cela être plus précis pour votre application: PHP to SEARCH the Upper+Lower Case mixed Words in the strings?

Questions connexes