2010-12-13 4 views
15

Не удалось найти функцию для этого. Я предполагаю, что мне нужно использовать регулярное выражение?Как определить, содержит ли строка 1 прописную букву в PHP

Я пытаюсь выполнить переадресацию html в php в случаях, когда в URL-адресе содержится хотя бы 1 буква верхнего регистра.

пример: http://www.domain.com/Michael_Jordan необходимо перенаправить на http://www.domain.com/michael_jordan - проблема только в том, что я не могу найти скрипт, чтобы определить, существует ли хотя бы одна заглавная буква.

+0

@Bob: Я не вижу смысла делать то же самое, что и ваш пример, поскольку имя DNS нечувствительно к регистру. – RageZ

+0

Это то, что меня попросили сделать, чтобы улучшить seo-изменение структуры сайта URL-адреса - прошлые URL-адреса имели заглавные буквы, поэтому мы пытаемся сохранить силу страницы из этих URL-адресов при переходе на новые. –

+0

@Bob: Я вижу, это объясняет это – RageZ

ответ

26

Некоторые регулярные выражения должны быть в состоянии работы, вы можете использовать preg_match и [A-Z]

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

«Существует ** как минимум ** один верхний – zerkms

+0

@zerkms извините, пропустил вашу точку, отсутствующий' + ' – RageZ

+4

« + »совершенно не нужен. – eyelidlessness

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

Действительно, это просто, но разве это не преувеличение strtolower? – zerkms

+1

В отличие от чего?Переосмыслить колесо для простых вещей, подобных этому, просто глупо. –

+0

В отличие от регулярного выражения, которое является imho, более семантический способ решить эту проблему (потому что само регулярное выражение описывает то, что мы делаем). – zerkms

4

Вы также можете попробовать это

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

не уверен, если это более эффективно, чем другие два предложенных метода.

+0

Я чувствовал, что это более прямой ответ, будучи функцией, которая уже существует в PHP. – Anther

+2

Это будет работать с строками, которые содержат буквенные символы * только *. Например, это не будет работать на строки ' быстро или 'noupper1'. – FixMaker

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

Протестировано с использованием венгерских символов utf-8, [A-Z] предназначен только для latin1.

0

Вот проще, например:

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

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

Производит:

1 
C: preg match 

Это говорит о том, что круглые скобки не нужны --Для один матч, по крайней мере

Посмотрите на это в более конкретно для вашей заявки: PHP to SEARCH the Upper+Lower Case mixed Words in the strings?

Смежные вопросы